web-dev-qa-db-ja.com

nginxがhttpをhttpsにリダイレクトしない

Httpからhttpsに再ルーティングしようとしています。たとえば、example.comにアクセスすると、自動的に https://example.com にリダイレクトされます。

私はこれを使ってみました:

server {
      listen         80;
      return 301 https://$Host$request_uri;
} 

これと同様に:

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

ここにあるように: Nginxでは、サブドメインを維持しながらすべてのhttpリクエストをhttpsに書き換えるにはどうすればよいですか?

しかし、どちらも私には気になりません。私はexample.comに滞在しています。

誰かがアイデアを得ましたか?

1
thotho

ホストのサーバー名を定義していません。

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

それ以外の場合、ホストは呼び出されません。例を見ると、どちらの場合にもサーバー名が定義されていることがわかります。

5
René Höhle

私にも同様の欠陥がありました。ページをリダイレクトする代わりに404を保持しました。

構成間の競合であることが判明しました。

私の設定は/etc/nginx/conf.d/に置かれました。私が気づかなかったことは、/ etc/nginx/sites-enabled /にデフォルト設定が配置されていて、conf.dの設定より優先度が高いポート80でリッスンしていることでした。デフォルトの構成を削除するだけで問題が解決し、リダイレクトは適切に機能しました。

2
christofferp

2番目の例は http://example.com へのすべてのリクエストで機能しますが、www.example.comとexample.comは異なるので、例で何かをリダイレクトする必要がある場合に注意してください。あなたができるcom

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

または、各ホストのリダイレクト、つまり.

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

Nginxのリロードを介して変更を行う場合は、nginx -tを介して構成をテストし、構成をリロードしてください。ライブのhttpヘッダーまたはカールのいずれかを使用して、何を取得しているかをテストできます

以下の出力は、上記の正確なサーバーブロックでhttpsに転送するドメインにhttpヘッダーリクエストを試行したときに表示されるものです。

$ curl -I -L http://Host.domain.com
HTTP/1.1 301 Moved Permanently
Server: nginx/1.6.2
Date: Mon, 06 Apr 2015 03:26:39 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: https://Host.domain.com/

HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Mon, 06 Apr 2015 03:26:41 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.5.22
Set-Cookie: PHPSESSID=dca72682392e7ac96d4b7703ea7a1eb1; path=/; domain=domain.com; secure; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=c910822f8007fe8c0424715a24aa4728; path=/; domain=domain.com; secure; HttpOnly
0
Jchieppa