Nginx 拒绝 IP 并设置自定义 403 下载文件?

Nginx 拒绝 IP 并设置自定义 403 下载文件?

我已附加在 Ubuntu 上运行的默认站点的 Nginx conf 文件。

我想要实现的目标如下:

  1. 主目录/usr/share/nginx/www包含默认文件index.php
  2. 限制 IP 地址,直到发布为止,只有我的 IP 可以查看网站
  3. 对于其他试图访问该网站的用户,拒绝他们,但显示一个自定义的 403 页面,该页面403.html位于/usr/share/nginx/www主目录中

但是,当我从其他 IP 地址(被拒绝访问的 IP 地址)访问该网站时,它会加载 403.html 页面,但会下载一个名为“download”的文件。如果我访问 example.com/index.php,它会下载一个 index.php 文件。

有些配置不正确,但不确定是什么。

server {
        listen   80;


        root /usr/share/nginx/www;
        index index.php;

        server_name example.com;

        location / {
                try_files $uri $uri/ /index.php;

                # restrict IP's
                allow 123.456.789.0;
                allow 123.456.789.1;
                deny all;
        }

        location = /403.html {
           root   /usr/share/nginx/www;
           allow all;
        }

        error_page 404 /404.html;
        error_page 403 /403.html;       

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
              root /usr/share/nginx/www;
             # root /var/www;
        }

        # pass the PHP scripts to FastCGI server listening on the php-fpm socket
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;

        }

}

答案1

您应该将拒绝规则从location /一个级别移到上一级,因为现在它们不适用于 php 请求。

server {
        listen   80;


        root /usr/share/nginx/www;
        index index.php;

        server_name example.com;

        allow 123.456.789.0;
        allow 123.456.789.1;
        deny all;

        location / {
                try_files $uri $uri/ /index.php;
        }

        #....

        # pass the PHP scripts to FastCGI server listening on the php-fpm socket
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
}

相关内容