https www无法redirect到非https的https nginx

我似乎无法将我的https://wwwredirecthttps://当前该网站如何认为www 。 是一个完全独立的网站。 我想正确的redirect,但是当我在我认为正确的地方添加configuration时,我得到了一个无限的redirect。 非https wwwredirect正确。 唯一的问题是https://www

这里是我的nginxconfiguration,也许我只是想念一些东西。 我删除了https://wwwredirect,因为我似乎无法正确地进行。

 server { listen 192.168.0.123:80; server_name www.site.com site.com; location /rss/main/ { uwsgi_pass unix:///tmp/site.com.sock; include uwsgi_params; } location / { rewrite ^ https://site.com$request_uri permanent; } } server { listen 192.168.0.123:443 ssl; server_name site.com; access_log /var/log/nginx/site.com_access.log; error_log /var/log/nginx/site.com_error.log; ssl_certificate /srv/ssl/site_com.crt; ssl_certificate_key /srv/ssl/site.com.key; location / { uwsgi_pass unix:///tmp/site.com.sock; include uwsgi_params; } location /static/ { alias /var/www/site.com/static_final/; } location /media/ { alias /var/www/assets/site/; } } 

任何帮助表示赞赏,因为我不希望人们意外访问www。

对于简单的301redirect,我们可以使用return指令。

 server { listen 192.168.0.123:443 ssl; server_name www.site.com; ssl_certificate /srv/ssl/site_com.crt; ssl_certificate_key /srv/ssl/site.com.key; return 301 $scheme://site.com$request_uri; } 

这与Alan的答案是一样的,但是通过使用return指令,我们完全可以避免正则expression式的评估 。

我假设您的SSL证书涵盖www.site.com和site.com。 以下似乎是处理这个最合适的方式?

 server { listen 192.168.0.123:443 ssl; server_name www.site.com; ssl_certificate /srv/ssl/site_com.crt; ssl_certificate_key /srv/ssl/site.com.key; rewrite ^ https://site.com$request_uri permanent; }