Nginx

NGINX 將除 letencrypt 之外的所有內容重定向到 https

  • November 11, 2020

我有一個簡單的配置,將除了letsencrypt請求之外的所有內容都重定向到https,然後讓我的虛擬主機在https..

目前我所有的請求都被重定向到 https,然後是 404 用於letsencrypt:

這是我的配置…

server {
       listen 80 default_server;
       listen [::]:80 default_server;
       server_name _;
       location ^~ /.well-known/acme-challenge/ {
           allow all;
           default_type text/plain;
           return 200 "$1.abcd-efgh";
       }

       location / {
           return 301 https://$host$request_uri;
       }
}

server {
   listen 443 ssl;
   server_name plex.my_domain.com;

   ssl_session_timeout 30m;
   ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
   ssl_certificate      /root/.acme.sh/plex.my_domain.com/fullchain.cer;
   ssl_certificate_key  /root/.acme.sh/plex.my_domain.com/plex.my_domain.com.key;
   ssl_session_cache shared:SSL:10m;


   add_header X-Xss-Protection "1; mode=block" always;
   add_header X-Content-Type-Options "nosniff" always;
   add_header Strict-Transport-Security "max-age=2592000; includeSubdomains" always;
   add_header X-Frame-Options "SAMEORIGIN" always;
   proxy_hide_header X-Powered-By;
   add_header 'Referrer-Policy' 'no-referrer';
   add_header Content-Security-Policy "frame-ancestors my_domain.com plex.my_domain.com;";


   location / {
       proxy_pass http://127.0.0.1:32400;

       proxy_set_header Range $http_range;
       proxy_set_header If-Range $http_if_range;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header Host $host;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

       #Next three lines allow websockets
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
   }
}

您在 https 伺服器塊中設置了 HSTS 標頭。這意味著如果您使用瀏覽器訪問您的網站https一次,您的瀏覽器將在第一次訪問後始終使用 https 連接到您的域。

這意味著您無法使用瀏覽器測試您的配置。您需要使用curl不儲存 HSTS 列表的或類似工具對其進行測試。

您的配置有一個小調整,您可以location /.well-known/acme-challenge對 LetsEncrypt 位置使用簡單的前綴匹配。nginx 將使用location塊中最具體的匹配。

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