web-dev-qa-db-ja.com

nginx HTTPSへのHTTPリダイレクト

Httpsからhttpにリダイレクトするにはどうすればよいですか?

私は以下のコードを持っていますが、動作していないようです。

server {
        listen 443;
        server_name example.com;
        rewrite ^(.*) http://example.com$1 permanent;
 }
30
keno

上記の答えは機能します。自己署名証明書を生成する(または実際の証明書を持っている)必要があり、nginxを次のように構成する必要があります。

server {
  listen *:443;
  ssl on;
  server_name domain.com;
  rewrite ^(.*) http://domain.com$1 permanent;

  ssl_certificate      /data/certs/domain.crt;
  ssl_certificate_key  /data/certs/domain.key; 
 }

自己署名証明書である場合、ブラウザはい警告を出します。

23
brupm

Jbergerのコメントを基に、動作するはずの構成は次のようになります。

server {
    listen *:80;
    server_name example.com;
}

server {
    listen              *:443 ssl;
    server_name         example.com;
    ssl_certificate     /etc/ssl/certs/example.com.cert;
    ssl_certificate_key /etc/ssl/private/example.com.key;
    return 301 http://$server_name$request_uri;
}
14
krd

2つの個別のサーバーブロックを作成する必要があります。

  1. ポート443(HTTPS)-このブロックでPHP、404、home、rootなどのすべてを定義します。 https://www.example.comhttps://example.com またはその逆にリダイレクトする場合でも、@ coulixが持っているようにここでやり直してくださいできた。

  2. ポート80(HTTP)-ここでは、次のものを使用します。

server {
    listen    80;
    listen    [::]:80;
    server_name    example.com www.example.com;

    # Redirect HTTP to HTTPS
    return    301    https://example.com$request_uri;
}
0
hiAkki
    if ($Host = 'foo.com') {
        rewrite  ^/(.*)$  http://www.foo.com$1  permanent;
    }
0
coulix