我正在尝试让我的nginx服务器将任何www请求重定向到非www。在nginx服务器上,我使用Docker在端口3003上运行React应用程序。
下面是我的配置:
server {
server_name www.example.com; # managed by Certbot
location / {
proxy_pass http://localhost:3003; # 8030 is the port the Docker container is running on
proxy_set_header Host $host;
#try_files $uri $uri/ =404;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = www.example.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = www.example.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 ;
listen [::]:80 ;
server_name example.com www.example.com;
return 404; # managed by Certbot
}
4条答案
按热度按时间67up9zun1#
经过几个小时的搜索,我找到了解决方案:
92vpleto2#
如果要将用户从www重定向到普通的非www域,请插入以下配置:
保存并退出。这将配置Nginx将对“www.example.com”的请求重定向www.example.com到“example.com”。请注意,应该有另一个服务器块来定义非www Web服务器。
要使更改生效,请重新启动Nginx:
请注意,如果您使用HTTPS,则应将listen指令设置为端口443而不是80。
使用curl命令确保非www域重定向到www域(将突出显示的部分替换为您的实际域):
你应该得到一个301 Moved Permanently响应,它显示了非www重定向位置,如下所示:
当然,您应该在Web浏览器(www和非www)中访问您的域名。有关更多详细信息,您可以访问此链接:https://www.digitalocean.com/community/tutorials/how-to-redirect-www-to-non-www-with-nginx-on-centos-7
axkjgtzd3#
将此添加到您的服务器指令并更改网站URL。
r7s23pms4#
您可以使用
map
而不是if
来提取$host
值的一部分:在本例中,
map
指令提取$tld
的值,该值不包含URL的www.
部分。