server {
listen 80 default_server;
listen 443 default_server ssl;
server_name www.site.com site.com;
access_log /var/www/site.com/logs/nginx.access_log;
error_log /var/www/site.com/logs/nginx.error_log;
if ($scheme != 'https') {
rewrite ^/(.*)$ https://$host/$1 permanent;
}
if ($host != 'site.com') {
rewrite ^/(.*)$ https://site.com/$1 permanent;
}
#fix for error 400 Bad Request\nThe plain HTTP request was sent to HTTPS port
error_page 497 https://$host:443$request_uri;
root /var/www/site.com/public_html;
index index.html index.htm;
ssl on;
ssl_certificate /etc/nginx/ssl/site.com.compiled.crt;
ssl_certificate_key /etc/nginx/ssl/site.com.key;
#ssl_session_timeout 5m;
#ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
#ssl_prefer_server_ciphers on;
location / {
try_files $uri $uri/ =404;
fastcgi_param HTTPS on;
}
}
Сертификат получен только на site.com. Хочется сделать еще второй хост, тестовый, вида dev.site.comserver {
listen 80;
server_name dev.site.com www.dev.site.com;
access_log /var/www/dev.site.com/logs/nginx.access_log;
error_log /var/www/dev.site.com/logs/nginx.error_log;
if ($host != 'dev.site.com') {
rewrite ^/(.*)$ http://dev.site.com/$1 permanent;
}
# error_page 497 http://$host$request_uri;
root /var/www/dev.site.com/public_html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
И вот начинаются проблему. При попытке зайти на тестовый хост, идет переадресация на основной и пытается отправить именно на https, в связи с чем вылетает свойственная nginx ошибка о попытке отправки незащищенного контента на защищенный хост. Можно ли каким образом сделать так, чтобы один хост работал только через ссл, соответсвенно перекидывал нерадивых туда сам, а второй, тестовый, только через http server {
listen 80 default_server;
server_name www.site.com site.com;
access_log /var/www/site.com/logs/nginx.access_log;
error_log /var/www/site.com/logs/nginx.error_log;
return 301 https://site.com$request_uri;
}
server {
listen 443 ssl;
server_name www.site.com;
access_log /var/www/site.com/logs/nginx.access_log;
error_log /var/www/site.com/logs/nginx.error_log;
ssl on;
ssl_certificate /etc/nginx/ssl/site.com.compiled.crt;
ssl_certificate_key /etc/nginx/ssl/site.com.key;
return 301 https://site.com$request_uri;
}
server {
listen 443 default_server ssl;
server_name site.com;
access_log /var/www/site.com/logs/nginx.access_log;
error_log /var/www/site.com/logs/nginx.error_log;
root /var/www/site.com/public_html;
index index.html index.htm;
ssl on;
ssl_certificate /etc/nginx/ssl/site.com.compiled.crt;
ssl_certificate_key /etc/nginx/ssl/site.com.key;
location / {
try_files $uri $uri/ =404;
fastcgi_param HTTPS on;
}
}
server {
listen 443 ssl;
server_name www.dev.site.com dev.site.com;
access_log /var/www/dev.site.com/logs/nginx.access_log;
error_log /var/www/dev.site.com/logs/nginx.error_log;
return 301 http://dev.site.com$request_uri;
}
server {
listen 80;
server_name www.dev.site.com;
access_log /var/www/dev.site.com/logs/nginx.access_log;
error_log /var/www/dev.site.com/logs/nginx.error_log;
return 301 http://dev.site.com$request_uri;
}
server {
listen 80;
server_name dev.site.com;
access_log /var/www/dev.site.com/logs/nginx.access_log;
error_log /var/www/dev.site.com/logs/nginx.error_log;
root /var/www/dev.site.com/public_html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
# Ловит всех по http
server {
listen 80;
server_name site.com www.site.com;
return 301 https://site.com$request_uri;
}
# Только https, с лишним www.
server {
listen 443 ssl;
server_name www.site.com;
return 301 https://site.com$request_uri;
}