nginx 突然将所有内容重定向到 403 页面,可以调试或跟踪吗?

nginx 突然将所有内容重定向到 403 页面,可以调试或跟踪吗?

我不知道我的nginx安装出了什么问题。突然所有页面请求都被重定向到该403页面。

昨天我尝试添加用户代理来阻止,重新启动服务后,所有内容都发送到 403。我撤消了更改,重新启动后nginx所有内容仍定向到该403页面。即使我删除了$http_user_agentand $http_refererif 语句,所有内容仍发送到 403。

我甚至从备份中恢复了整个nginx文件夹,但我的所有页面请求仍然被定向到 403 页面......

不确定如何排除此故障,conf 文件恢复正常。我可以跟踪nginx请求何时进入吗?

[root@soupcan nginx]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

以下是网站配置文件:

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;

    access_log  /var/log/nginx/website1/access.log  main;
    error_log /var/log/nginx/website1/error.log;

    root /srv/www/website1;

    ## Block http user agent - morpheus fucking scanner ##
    if ($http_user_agent ~* "morfeus fucking scanner|ZmEu|Morfeus strikes again.|OpenWebSpider v0.1.4 (http://www.openwebspider.org/)") {
        return 403;
     }

    if ($http_referer ~* (semalt.com|WeSEE)) {
        return 403;
    }

    ## Only allow GET and HEAD request methods. By default Nginx blocks
    ## all requests type other then GET and HEAD for static content.
    if ($request_method !~ ^(GET|HEAD)$ ) {
      return 405;
    }


    location / {
        index  index.html index.htm index.php;
        ssi on;
    }

    location ~ \.php {
        try_files $uri =404;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        #fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /srv/www/website1/$fastcgi_script_name;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }


    # Redirect server error pages to the static page
    error_page 403 404 /error403.html;
    location = /error403.html {
        root /usr/share/nginx/html;
    }
}

nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    gzip  on;
    gzip_disable "msie6";
    gzip_min_length 1100;
    gzip_vary on;
    gzip_proxied any;
    gzip_buffers 16 8k;
    gzip_types text/plain text/css application/json application/x-javascript
        text/xml application/xml application/rss+xml text/javascript
        image/svg+xml application/x-font-ttf font/opentype
        application/vnd.ms-fontobject;

    server_tokens off;

    include /etc/nginx/conf.d/*.conf;
    # Load virtual host configuration files.
    include /etc/nginx/sites-enabled/*;

    # BLOCK SPAMMERS IP ADDRESSES
    include /etc/nginx/conf.d/blockips.conf;
}

webroot 目录的权限:

[root@soupcan nginx]# namei -om /srv/www/website1/
f: /srv/www/website1/
 dr-xr-xr-x root  root   /
 drwxr-xr-x root  root   srv
 drwxrwxr-x brian nobody www
 drwxr-x--x brian nobody website1

编辑

发现 CentOS 6.6 和 SELinux 破坏了 nginx。我仍在寻找解决方案,但原因如下。

编辑2

解决方案发布如下。

答案1

这个问题是由于 CentOS 从 6.5 升级到 6.6 以及 SElinux 允许内容类型通过的方式引起的。升级后,SElinux 默认只允许httpd_t内容通过(类似于它们对 Apache 的处理方式),而且由于我将所有 Web 内容存储在/srv/www/这些用户创建的文件夹中,因此系统不会自动设置内容标签。

要检查这一点,请针对您的 webroot 和目录运行以下命令/etc/nginx并比较内容类型:

ls -Z /srv/www/

我已经运行这些命令并重新启动nginx,现在一切正常运行。

grep nginx /var/log/audit/audit.log | audit2allow -m nginx > nginx.te
grep nginx /var/log/audit/audit.log | audit2allow -M nginx
semodule -i nginx.pp

我不确定这个 SElinux 模块是做什么的,但我发现它读起来这个帖子关于同一个问题。我今天可能会尝试将其撤消,因为我认为我修复此问题的第二件事确实有效。

[09:15 AM] robotoverlord ~>chcon -Rv --type=httpd_sys_content_t /srv/www/
[09:15 AM] robotoverlord ~> ls -Z /srv/www/
drwxr-xr-x. www-data nobody unconfined_u:object_r:httpd_sys_content_t:s0 website1
[09:15 AM] robotoverlord ~>service nginx restart

有关 SElinix 内容标签的其他信息

问题解决了!

答案2

chmod ogw file 

设置文件权限o沃纳,G团和orld,每个都是 read(4)、write(2)、execute(1) 的总和,如果需要

没有适当的读写权限

drwxr-x--x brian nobody website1

nginx 是只读的,所以你必须让他进入!

cd /srv/
find . -type d -exec chmod 755 {} \;

相关内容