我已附加在 Ubuntu 上运行的默认站点的 Nginx conf 文件。
我想要实现的目标如下:
- 主目录
/usr/share/nginx/www
包含默认文件index.php
- 限制 IP 地址,直到发布为止,只有我的 IP 可以查看网站
- 对于其他试图访问该网站的用户,拒绝他们,但显示一个自定义的 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;
}