У меня есть веб-сервер под управлением nginx 1.6 с одним IP-адресом и хостингом www.domainname.com, а также dev.domainname.com.
Я пытаюсь найти разумный способ перенаправить весь http-трафик на https, и я хочу убедиться, что мой сервер по умолчанию - это живая версия времени с www. Таким образом, конечная цель состоит в том, чтобы, если пользователь не указал https://dev.domainname.com они будут перенаправлены на https://www.domainname.com.
Моя установка nginx.conf настроена так, чтобы включать '/ etc / nginx / etc / sites-enabled / *'. Итак, мой пример конфигурации находится в etc / nginx / sites-enabled / www.domainname.com.
Также для уточнения. В моей текущей конфигурации возникают проблемы с загрузкой сайта разработчика, когда вы посещаете домен без www.
редактировать: Я только что попробовал этот метод локально, а http и https не разрешены в '/ etc / nginx / sites-enabled /'. Есть ли лучшее решение, или мне следует переместить эту конфигурацию в nginx.conf? *
Итак, мой вопрос, есть ли лучший способ справиться с этим типом настройки?
http {
# all traffic should be over https
listen 80 default;
# listen for all server names
server_name *.domainname.com;
# redirect to www with https
return 301 $scheme://www.domainname.com$request_uri;
}
https {
# configuration for all https sites
listen 443 default ssl;
ssl on;
index index.html index.htm index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
access_log off;
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
# configuration for the non-www redirect
server {
# non-www server name
server_name domainname.com;
# return to www
return 301 $scheme://www.domainname.com$request_uri;
}
# configuration for the live website
server {
# www server name
server_name www.domainname.com;
# root to public directory
root /path/to/www.domainname.com/public;
# ssl certificates
ssl_certificate /etc/nginx/ssl/www.domainname.com/ssl-bundle.crt;
ssl_certificate_key /etc/nginx/ssl/www.domainname.com/server.key;
# error logs for www site
error_log /var/log/nginx/www.domainname.com-error.log error;
}
# configuration for the dev site
server {
# dev server name
server_name dev.domainname.com;
# root to public directory
root /path/to/dev.domainname.com/public;
# ssl certificates - using multi domain ssl
ssl_certificate /etc/nginx/ssl/www.domainname.com/ssl-bundle.crt;
ssl_certificate_key /etc/nginx/ssl/www.domainname.com/server.key;
# error logs for dev site
error_log /var/log/nginx/dev.domainname.com-error.log error;
}
}
Все, что вам нужно, это:
server {
listen 80;
server_name *.domainname.com;
return 301 https://$server_name$request_uri;
}
Если ваш дистрибутив основан на Debian, у вас есть sites-available/default
файл установлен. Это файл, который настраивает страницы по умолчанию для nginx.
Вам нужно отключить этот виртуальный хост, запустив его символическую ссылку с rm sites-enabled/default
.
Затем вам нужно сделать новый default
со следующим содержанием:
server {
listen 80 default_server;
listen 443 default_server ssl;
server_name _;
ssl_certificate /path/to/your/certificate;
ssl_certificate_key /path/to/your/key;
redirect 301 https://www.domainname.com$request_uri;
}
Этот блок гарантирует, что все запросы к другим доменам, не указанным везде, будут перенаправлены на https://www.domainname.com.
Затем создайте другой файл, например dev.domainname.com
:
server {
listen 443 ssl;
server_name dev.domainname.com;
ssl_certificate /path/to/your/certificate;
ssl_certificate_key /path/to/your/key;
# Other config for dev.domainname.com
}
Этот блок обрабатывает запросы на dev.domainname.com
.
И наконец, www.domainname.com
:
server {
listen 443 ssl;
server_name www.domainname.com;
ssl_certificate /path/to/your/certificate;
ssl_certificate_key /path/to/your/key;
# Other config for www.domainname.com
}
И этот блок обрабатывает запросы на www.domainname.com
.