web-dev-qa-db-ja.com

Nginxはhttpsでリダイレクトしません

すべてのリクエストをhttpsにリダイレクトしたい。現在メインページで機能しているので、取得しようとしています http://domain.com httpsにリダイレクトされます。しかし、それから私は http://domain.com/somematerials/presentation のようなサブリンクに行きますそれは決して私をリダイレクトしません。そして、これが私の設定です。

server {
    listen 80;
    return 301 https://$Host$request_uri;
}
server {
    listen     443;
    server_name  my.domain.com;
    ssl on;
    ssl_certificate /path/ssl.crt;
    ssl_certificate_key /path/server.key;

    location / {
        root  /home/uploader/datadir/;
        index  index.html index.htm;
    }
}
1
Denis

ポート80サーバーブロックはデフォルトではありません。ポート80の定義にdefault_serverを追加してみてください。

server {
    listen 80 default_server;
    ....
}
2
AWippler

以下はテスト済みで適切に機能する構成です:

server {
listen 80; # Default listen port
server_name    mydomain.com;
return 301 https://$server_name$request_uri;
}

server {
listen 443;
ssl on ;
server_name mydomain.com;;

....

}

これを行うもう1つの方法:

server {
listen 80; # Default listen port
if ( $Host = domain.com ) { rewrite ^/(.*)$ https://domain.com/$1 permanent; }
server_name domain.com;
......
}

server {
listen 443;
ssl on;
server_name domain.com;
ssl_certificate /etc/nginx/conf.d/certificates/domain.com.crt;
ssl_certificate_key /etc/nginx/conf.d/certificates/domain.com.key;

.......
}
1
Sachin Singh

私の目には主な問題は、server_nameディレクティブをまったく使用していないため、nginxがその書き換え内容を認識していないことです。 SSLビットを削除した場合:

server {
  listen 80;
  server_name *.mydomain.com mydomain.com
  return 301 https://$Host$request_uri;
}
server {
  listen     443;
  #include snippets/certloc.conf
  server_name  my.domain.com;

  location / {
    root  /home/uploader/datadir/;
    index  index.html index.htm;
  }
}
1
nobody