Nginx

使用 Nginx 通過 SSL 將非 www 重定向到 www

  • May 30, 2021

嘗試將 https://example.com 重定向https://www.example.com出現錯誤。

當我轉到https://example.com時,它不會重定向並返回 page/200 狀態。

我不想要這個,我希望它重定向到https://www.example.com

當我去http://example.com>時,它會重定向到<https://www.example.com

有人可以告訴我哪裡出錯了嗎?

這是我的預設和預設 SSL 配置文件:

預設.conf

server {
   listen 80;
   server_name example.com;
   return 301 https://www.example.com$request_uri;
}

預設-ssl.conf

upstream app_server_ssl {
   server unix:/tmp/unicorn.sock fail_timeout=0;
}

server {
   server_name example.com;
   return 301 https://www.example.com$request_uri
}
server {
   server_name www.example.com;

   listen 443;
   root /home/app/myproject/current/public;
   index index.html index.htm;

   error_log /srv/www/example.com/logs/error.log info;
   access_log /srv/www/example.com/logs/access.log combined;

   ssl on;
   ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
   ssl_certificate /srv/www/example.com/keys/ssl.crt;
   ssl_certificate_key /srv/www/example.com/keys/www.example.com.key;
   ssl_ciphers AES128-SHA:RC4-MD5:ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:RSA+3DES:!ADH:!AECDH:!MD5:AES128-SHA;
   ssl_prefer_server_ciphers on;

   client_max_body_size 20M;


   try_files $uri/index.html $uri.html $uri @app;


   # CVE-2013-2028 http://mailman.nginx.org/pipermail/nginx-announce/2013/000112.html
   if ($http_transfer_encoding ~* chunked) {
           return 444;
       }

   location @app {
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header Host $http_host;
       proxy_redirect off;
       proxy_pass http://app_server_ssl;
   }

   error_page 500 502 503 504 /500.html;

   location = /500.html {
       root /home/app/example/current/public;
   }
}

listen在文件中缺少指令default-ssl.conf。添加listen 443;此指令

server {
   server_name example.com;
   return 301 https://www.example.com$request_uri;
}

預設情況下,如果你省略這個指令,nginx 會假設你想監聽 80 埠。這裡是這個預設行為的文件。


編輯:感謝@TeroKilkanen 的評論。

這是您的 default-ssl.conf 的完整配置

server {
   listen 443 ssl;
   server_name example.com;

   ssl_certificate /srv/www/example.com/keys/ssl.crt;
   ssl_certificate_key /srv/www/example.com/keys/www.example.com.key;
   return 301 https://www.example.com$request_uri;
}

旁注:您可以將ssl on;指令替換listen 443 ssl;nginx 文件中的建議。

引用自:https://serverfault.com/questions/624848