32437


現在、複数のサービスを運用しておりまして、どのサービスもサブドメインありのページになっております。  
しかし、少数ではありますが、サブドメインなしのURLにアクセスするユーザーがおります。

そういうユーザーにはwwwのサブドメインをつけて、リダイレクトするようにしたいのですが、  
そういった設定をnginxで出来ますでしょうか？

リダイレクト自体は次のような設定でできましたが、  
今回の場合httpsのページに飛ばさなくてはいけないのと、サブドメインが付いている場合は、  
wwwではなく、サブドメインのURLに飛ばしたいです。

[code]

    server {
      listen 80;
      server_name example.com;
      rewrite ^(.*)$ http://www.example.com$1 permanent;
    }
    
[/code]

仮に `sub.example.com` というURLにアクセスした場合は、wwwに変えずに、そのまま、アクセスしてほしく、`example.com`
というURLにアクセスした場合は www.example.com にリダイレクトさせてほしいです。

また、Railsではforce_sslとしており、httpからのアクセスをhttpsにリダイレクトさせております。

宜しくお願いします。

# nginxの設定ファイル

この設定だとリダイレクトが繰り返し行われてしまいます。  
`rewrite ^(.*)$ https://www.example.com$1 permanent;`
の行をなくせば問題なく動作するものの、サブドメインの件が解消されていないので困っております。

また、SSLはドメインのワイルドカードで取得しているため、  
サブドメインなしのURLにアクセスすると、

`プライバシーエラー`

が表示されてしまいます。

[code]

    upstream unicorn_app_name {
     server unix:/srv/www/app_name/shared/sockets/unicorn.sock fail_timeout=0;
    }
    
    server {
      listen 80;
      server_name app_name rails-app;
      rewrite ^(.*)$ https://www.example.com$1 permanent;
    
      access_log /var/log/nginx/app_name.access.log;
    
      keepalive_timeout 5;
    
      root /srv/www/app_name/current/public/;
    
    
      location / {
        try_files $uri/index.html $uri/index.htm @unicorn;
      }
    
      location @unicorn {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
    
        proxy_read_timeout 60;
        proxy_send_timeout 60;
    
        # If you don't find the filename in the static files
        # Then request it from the unicorn server
        if (!-f $request_filename) {
          proxy_pass http://unicorn_app_name;
          break;
        }
      }
    
      location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        deny all;
      }
    
      error_page 500 502 503 504 /500.html;
      location = /500.html {
        root /srv/www/app_name/current/public/;
      }
    }
    
[/code]


CC BY-SA 3.0
2017-02-06T15:15:53.787
32433
2017-02-07T06:51:13.650
2017-02-07T06:51:13.650
76
13175
question
nginx
サブドメインなしのURLでアクセスしたときのみ、wwwのサブドメインを付与してリダイレクトさせる設定をnginx.confに記述したいです。


証明書エラーはひとまず置いておいて、普通に`server`ディレクティブを2つ書くだけではダメそうですか？(同一ファイル or それぞれの.conf)

[code]

    server {
      listen 80;
      server_name example.com;
      return 301 https://www.example.com$request_uri;
    }
    
    server {
      listen 80;
      listen 443 ssl;
      server_name *.example.com;
    
      access_log /var/log/nginx/app_name.access.log;
      // 以下省略
    }
    
    upstream unicorn_app_name {
     server unix:/srv/www/app_name/shared/sockets/unicorn.sock fail_timeout=0;
    }
    
[/code]


CC BY-SA 3.0
2017-02-06T17:58:28.637
32437
2017-02-06T17:58:28.637
2376
32433
answer