NGINX server_name 问题

NGINX server_name 问题

我在 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;
        }
    }

在我将相关设置包含在我的主机文件中之后,我得到了以下(意外的)行为:

  1. http://domain.com/ 和 http://domain.com:8090/ 工作正常;
  2. http://domain.com:8090/future-cell-phone-technology-01-150x150.jpg 有效;
  3. 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;
    }
}

相关内容