【问题标题】:NGINX Cannot handle bad requestsNGINX 无法处理错误请求
【发布时间】:2018-08-31 02:04:11
【问题描述】:

所以这是我第一次将 NGINX 用于任何事情。我有 2 台 CentOs 7 虚拟机——一台使用 NGINX,一台使用 APACHE。 在两者上我都有默认配置。 我在两者上都有相同的 php 页面。我尝试将带有不正确标头的 GET 请求推送到两者。 Apache 响应是错误 400 Bad Request - 这很好。 另一方面,NGINX 以纯文本形式公开 php。

我正在寻找一种在 NGINX 中保护它的方法,并在有不正确的标头时返回错误 400。 我希望有人能建议我在哪里可以配置它。

【问题讨论】:

  • 你能发布你的nginx配置吗?如果 nginx 返回 PHP 代码,很可能是您没有将其配置为使用 PHP 解释器,例如 php-fpm,因此它将 php 文件视为纯文本

标签: php nginx


【解决方案1】:

对于返回的header,已经回答过了,所以你可以把header放在你想要的地方:

nginx add headers when returning 400 codes

但是,如果您想要使用自定义页面处理错误,这样您就看不到整个 php 页面,您可以为每个错误创建自定义 .html 页面。本 DO 指南将为您提供帮助。

https://www.digitalocean.com/community/tutorials/how-to-configure-nginx-to-use-custom-error-pages-on-ubuntu-14-04

【讨论】:

  • 如果标头无效,我想返回 400。
【解决方案2】:

默认情况下,Nginx 只是忽略无效的标头。如果你希望它返回 400,那么你需要在你的配置中包含这个指令:

ignore_invalid_headers off;

这可以在 http 或服务器级别,但根据文档:

如果指令是在服务器级别指定的,它的值只有 如果服务器是默认服务器,则使用。指定的值也适用于 所有虚拟服务器都侦听相同的地址和端口。

【讨论】:

  • 所以我确实尝试过。我添加了“ignore_invalid_headers off;”到http下的/etc/nginx/nginx.conf,但问题仍然存在。
【解决方案3】:

如果标题为空,我只想添加我需要的内容 - 400 错误请求。但是,如果我在标题中输入与服务器主机名不同的任何内容,我就会遇到问题。

【讨论】:

    【解决方案4】:

    好的,所以我解决了我的问题。这是解决方案.. 在服务器块中我有这个:

     server {
    listen       80 default_server;
    server_name  domain1.com www.domain1.com;
    

    我必须删除 default_server,然后就可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 2018-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多