web-dev-qa-db-ja.com

Nginxはリダイレクトされませんが、機能しています

これはnginxを使用した最初のセットアップであり、nodejsへのプロキシに使用しています。 HTTPはポート3000にあり、HTTPSはポート3001にあります。

http://test.domain.com にアクセスすると、通常の安全でないページが読み込まれます。 https://test.domain.com にアクセスすると、安全なページが読み込まれます。しかし、https以外からhttpsにリダイレクトしたい。

私の設定の何が問題になっていますか?これは私が使用しているdomain.confファイル全体です。

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

server {
    listen 443 ssl;

    server_name test.domain.com;

    ssl_certificate /etc/nginx/ssl/domain.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

   location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Host $http_Host;
      proxy_set_header X-NginX-Proxy true;

      proxy_pass https://127.0.0.1:3001;
      proxy_redirect off;
   }
}

Nginxを何度も再起動しました。

ありがとう!

5
romo

あなたはhttpサーバーブロックで書き換えを使用できます

server {
    listen 80;
    server_name test.domain.com;
    rewrite ^ https://$server_name$request_uri? permanent;
}
2
Mudasir Mirza

行末に「;」がありません。(または単に壊れたコピー/貼り付け?)

    server_name test.domain.com;

有効なサーバー名なしでこのサーバーをオーバーライドする別のserver_blockがデフォルトサーバーで動作していると思います

ヒント:

  1. 1つのグローバルサーバーブロックですべてのhttpリクエストをキャッチする場合は、default_serverを使用します。

    listen 80 default_server;
    
  2. より多くの変数を使用できます;)

    return 301 https://test.domain.com$request_uri;
    

    return 301 https://$Host$request_uri;
    

    リライトを使用しないでください。リターンが最速です。