相同IP上的Nginx不同域

ber*_*ayk 119 dns nginx

我想使用nginx在同一台服务器上托管2个不同的域.我通过@ property将这两个域重定向到此主机.虽然我配置了2个不同的服务器块,但每当我尝试访问第二个域时,它都会重定向到第一个域.

这是我的配置.

server {
    listen      www.domain1.com:80;
    access_log  /var/log/nginx/host.domain1.access.log  main;
    root /var/www/domain1;
    server_name www.domain1.com;

    location ~ \.php$ {
        # Security: must set cgi.fixpathinfo to 0 in php.ini!
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME         $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        include /etc/nginx/fastcgi_params;
    }
}

server {
    listen       www.domain2.com:80;
    access_log  /var/log/nginx/host.domain2.access.log  main;
    root /var/www/domain2;
    server_name www.domain2.com;

    location ~ \.php$ {
        # Security: must set cgi.fixpathinfo to 0 in php.ini!
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME         $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        include /etc/nginx/fastcgi_params;
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?谢谢.

ayc*_*dee 157

你的"监听"指令是错误的.请参阅此页面:http://nginx.org/en/docs/http/server_names.html.

他们应该是

server {
    listen      80;
    server_name www.domain1.com;
    root /var/www/domain1;
}

server {
    listen       80;
    server_name www.domain2.com;
    root /var/www/domain2;
}
Run Code Online (Sandbox Code Playgroud)

注意,我只包括相关的行.其他一切看起来还不错,但我为了清楚起见将其删除了.要测试它,您可能希望在实际提供php之前尝试从每个服务器提供文本文件.这就是我在那里留下'root'指令的原因.

  • 这为我修好了.问题似乎是在我的两个`server {}`块中,sever_name指令是通配符:`.domain1.com`和`.domain2.com`.将它们更改为`server_name www.domain1.com domain1.com;`和`server_name www.domain2.com domain2.com;`现在每个站点都显示正确的页面,显示何时使用这些地址. (8认同)
  • 你真的不想那样做.选择www.domain.com或domain.com并将其重定向到另一个.在两个不同的地址具有相同的内容被视为垃圾邮件,并且可能严重损害您的搜索排名. (5认同)
  • 我知道这是一个古老的评论.但我认为这两个服务器块可能位于启用站点的单独配置文件中? (4认同)
  • 你也可以使用`.domain.com`.这是一个特殊的nginx通配符,匹配`domain.com`和`*.domain.com`.请参阅:http://nginx.org/en/docs/http/server_names.html (4认同)
  • 当然,这只取决于你想如何构建你的配置.我倾向于每个真实域名有一个文件.每个可能包含多个服务器块. (3认同)