我正在尝试强制将所有非 www 和非 https 请求重定向到https://www.example.com网站的版本。这是一个新网站,因此重定向不会对 SEO 产生影响。我正在尝试遵循此处的 NGINX 文档:http://nginx.org/en/docs/http/converting_rewrite_rules.html但是在这和 certbot 添加的内容之间,我最终有点困惑,并担心多次重定向的影响。
这是我当前的服务器配置文件:
server {
listen 80;
server_name example.com;
# $scheme will get the http protocol
# and 301 is best practice for tablet, phone, desktop and seo
return 301 $scheme://www.example.com$request_uri;
}
server {
server_name www.example.com;
passenger_enabled on;
rails_env production;
root /home/deploy/example_app/current/public;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
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;
}
if ($host = example.com) {
return 301 https://$host$request_uri;
}
listen 80;
listen [::]:80 ipv6only=on;
server_name www.example.com example.com;
return 404;
}
这样可以吗?或者我以某种方式整合它会更有效率吗?nginx 文档指出这样做这是一种错误的、繁琐的、无效的方法。但我对它的当前版本感到不满意。
如果重要的话,它将作为 Ruby on Rails 网站运行,托管在 VPS 上的 Phusion Passenger + NGINX 上。
答案1
我只需删除第三个 server {} 部分,并将 www.example.com 添加到第一个 server {} 。因此,第一行的 server_name 变为:
服务器名称 example.com www.example.com;
和
返回 301https://www.example.com$请求uri;没有理由进行如此多的重定向。
然后在第二个 server{} 部分的 server_name 中列出 example.com,或者为端口 443 添加一个新的 server{} 部分,其中包含必要的 ssl 配置,其中 server_name=example.com,然后重定向到https://www.example.com