如何在 nginx 中为名称添加别名而不为域名添加别名?

如何在 nginx 中为名称添加别名而不为域名添加别名?

我的配置文件中有这一行

server_name site.com m.site.com

我的代码会检查 URL 是否为移动版本m.site.com,并提供移动版本。但是当我这样做时,m.site.com/abc将显示我的代码site.com/abc,这是错误的。如果我复制/粘贴整个块并将 site.com 更改为 m.site.com,它就可以正常工作。但我宁愿没有重复的配置(或代码)。

有没有解决的办法?

答案1

它是一个无效的方式即使你检查$http_host配置。所以,最好的方法是把所有公共位放在一个文件中,然后包括将其放在单独的server块中:

server {
    listen       80;
    server_name  site.com;
    root         /var/www/localhost/htdocs/site.com;
    include      asp.conf
}

server {
    listen       80;
    server_name  m.site.com;
    root         /var/www/localhost/htdocs/m.site.com;
    include      asp.conf
    ...
}

答案2

您有两个选择:

1)nginx 的配置块有“重复”

2)让您的网站检测服务器名称(在 PHP 中,$_SERVER['SERVER_NAME'] 或 $_SERVER['HTTP_HOST'])并根据其内容提供不同的网站。

答案3

如果您使用 nginx 作为反向代理,请尝试在指令proxy_set_header附近添加指令proxy_pass,如下所示:

proxy_pass   http://my.asp.net.hostname:8000;
proxy_set_header Host $http_host;

这确保 nginx 逐字传递 Host 标头,而不是采用主 server_name。

相关内容