我在 NGINX 上有以下简单的服务器块:
server {
listen 80;
listen 8090;
server_name domain.com;
autoindex on;
root /home/docroot;
location ~ \.php$ {
include /usr/local/nginx/conf/fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/docroot$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
}
}
在我将相关设置包含在我的主机文件中之后,我得到了以下(意外的)行为:
- http://domain.com/ 和 http://domain.com:8090/ 工作正常;
- http://domain.com:8090/future-cell-phone-technology-01-150x150.jpg 有效;
- http://domain.com/future-cell-phone-technology-01-150x150.jpg -> 错误!“连接已重置”
(注意:在 http: 后添加了一个空格以避免链接保护,但这实际上并没有宣传任何东西)
我已经排除 (3) 故障几个小时了,但还是无法找出罪魁祸首。我在 Debian 6.0.2 32 位上运行 NGINX 1.0.10(最新稳定版本)。
这个 NGINX 实例运行另外 40 或 50 个站点,没有任何问题。
答案1
也许您需要使用 try_files 指令,因为看起来您在提供静态文件(.jpg 以及可能的其他图形、css 等)时遇到了问题,但在提供 php 文件时没有遇到问题。
来自 NGginx wiki 的 drupal 配置示例:
# for Drupal 6 or 7:
try_files $uri $uri/ /index.php?q=$uri&$args;
# a better version for Drupal 7 since it doesn't need q=$uri:
try_files $uri $uri/ /index.php?$args;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:8888;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # if not already defined in the fastcgi_params file
# any other specific fastcgi_params
}
更多详细信息请参阅:http://wiki.nginx.org/HttpCoreModule#try_files
因此,考虑到您的配置,也许只需添加 try_files 指令就可以像这样工作(未经测试)?:
server {
listen 80;
listen 8090;
server_name domain.com;
autoindex on;
root /home/docroot;
try_files $uri $uri/ /index.php?$args;
location ~ \.php$ {
include /usr/local/nginx/conf/fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/docroot$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
}
}