サブドメインなしのURLでアクセスしたときのみ、wwwのサブドメインを付与してリダイレクトさせる設定をnginx.confに記述したいです。
現在、複数のサービスを運用しておりまして、どのサービスもサブドメインありのページになっております。
しかし、少数ではありますが、サブドメインなしのURLにアクセスするユーザーがおります。
そういうユーザーにはwwwのサブドメインをつけて、リダイレクトするようにしたいのですが、
そういった設定をnginxで出来ますでしょうか?
リダイレクト自体は次のような設定でできましたが、
今回の場合httpsのページに飛ばさなくてはいけないのと、サブドメインが付いている場合は、
wwwではなく、サブドメインのURLに飛ばしたいです。
server {
listen 80;
server_name example.com;
rewrite ^(.*)$ http://www.example.com$1 permanent;
}
仮に 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にアクセスすると、
プライバシーエラー
が表示されてしまいます。
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/;
}
}