我有一个 nginx 配置,可以按照我的一个域的预期工作,但是每当我将另一个域指向我的服务器时,就会出现奇怪的重定向行为。
问题:
我想将对任何非 www 的所有请求重定向到我网站的 www 版本。
例如:
http://example.com应重定向到https://www.example.com
http://m.example.com应重定向到https://www.example.com
我的配置按 example.com 的预期工作,但每当我 cname 时,使用单独的配置文件将 cdn.test.com 写入我的服务器 IP。它重定向到 www.cdn.test.com
这是我的 example.com 配置:
server{
#redirect non-www to www
listen 80;
listen 443 ssl;
server_name example.com;
ssl_certificate .../cert.pem;
ssl_certificate_key .../key.pem;
return 301 https://www.$host$request_uri;
}
server{
#redirect request to the mobile site to the main site
listen 80;
server_name m.example.com;
return 301 https://www.example.com$request_uri;
}
server{
#redirect unsecure www to secure wwww
listen 80;
server_name www.example.com;
return 301 https://$host$request_uri;
}
upstream backend {
server 127.0.0.1:23042;
server 127.0.0.1:23043 backup;
}
server {
listen 443 ssl;
server_name www.example.com;
access_log off;
error_log off;
ssl_certificate .../cert.pem;
ssl_certificate_key .../key.pem;
location / {
proxy_pass http://backend;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header CF-IPCountry $http_cf_ipcountry;
}
location /static {
alias .../app/static;
expires 30d;
}
}
Run Code Online (Sandbox Code Playgroud)
这是 cdn.test.com 的配置:
server {
listen 80;
server_name cdn.test.com;
root /home/.../files;
}
Run Code Online (Sandbox Code Playgroud)
在您的配置中,第一个server块是default_server ,它将用于与更具体的服务器不匹配的所有请求。
不要return 301 https://www.$host$request_uri;在 default_server 中使用请求中的 Host 标头作为参数来生成重定向,因为这可能会导致各种不正确的情况,而应return 301 https://www.example.com$request_uri;始终重定向到 www.example.com
| 归档时间: |
|
| 查看次数: |
11929 次 |
| 最近记录: |