回答編集履歴

1 typo

ikedas

ikedas score 3033

2017/02/11 20:17  投稿

こうすればできると思います。
```
server {
 listen 80 default_server;
 server_name example.com;
 return 301 http://www.example.org$request_uri;
 return 301 http://www.example.com$request_uri;
}
server {
 listen 80;
 server_name www.example.com "";
 ...
}
server {
 listen 80;
 server_name sub.example.com;
 ...
}
```なお、この設定では``example.com``のサーバに``default_server``が指定してありますから、上記設定の3つのホスト名以外のホスト名でアクセスしてきた場合は、すべて最初のサーバが使われます (www.example.comにリダイレクトされます)。ですのでこの場合、``example.com``を明示せずに「``_``」などを指定しても同じです。
また、``www.example.com``のサーバで「``""``」が指定してあるのは、Hostヘッダフィールドを持たない古い (HTTP/1.0以前の) リクエストに対応するためです。
詳細は、下記のnginxのマニュアルを見て下さい。
# 参照
- nginx documentation: [Server names](http://nginx.org/en/docs/http/server_names.html)

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る