Назад | Перейти на главную страницу

Nginx Vhosts с SSL

У меня есть 3 домена, работающих на сервере nginx с ssl

domain.pw domain.info domain.mobi

У меня включен sni, и я использую виртуальный хост для каждого сайта.

записи хоста для сайта все такие

A Record: @ <IP ADDRESS> 1800
A Record: www <IP ADDRESS> 1800

все файлы conf похожи на это. и выполняют свою работу так, как задумано, за исключением одной проблемы (я расскажу об этом чуть позже, теперь я объясню файл конфигурации, который вы видите ниже)

шаг 1 server_name (первый комментарий) перенаправляет трафик с www на не-www

шаг 2 server_name перенаправляет трафик http: // на порт 80 на https: //

шаг 3 server_name это фактический код сервера для обслуживания страниц через ssl с порта 443.

log_format  www.domain.pw  '$remote_addr - $remote_user [$time_local] "$request" '
             '$status $body_bytes_sent "$http_referer" '
             '"$http_user_agent" $http_x_forwarded_for';

#redirects www traffic to domain.pw

server {
    server_name  www.domain.pw;
    rewrite ^(.*) https://domain.pw$1 permanent;
}

#redirect http traffic to https
server {
        listen   80;
        server_name domain.pw;
        return 301 https://$server_name$request_uri;
}

#server and ssl configuration.       
server {
        listen   443;
        server_name domain.pw;
        index index.php;
        root  /home/wwwroot/www.domain.pw;
        ssl on;
        #enables SSLv3/TLSv1, but not SSLv2 which is weak and should no longer be used.
        ssl_protocols SSLv3 TLSv1.2;
        #Disables all weak ciphers
        ssl_ciphers ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM;
        ssl_certificate /usr/local/nginx/ssl/domains/domain.pw.crt;
        ssl_certificate_key /usr/local/nginx/ssl/domains/domain.pw.pem;

        include other.conf;
        location ~ .*\.(php|php5)?$
            {
                try_files $uri =404;
                fastcgi_pass  unix:/tmp/php-cgi.sock;
                fastcgi_index index.php;
                include fcgi.conf;
            } 
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
            {
                expires      30d;
            }

        location ~ .*\.(js|css)?$
            {
                expires      12h;
            }



        access_log  /home/wwwlogs/www.domain.pw.log  www.domain.pw;
        error_page   404  =  /access_denied.php;
        error_page   403  =  /access_denied.php;
}

эта проблема

www.domain.info перенаправляет на https://domain.info

www.domain.mobi перенаправляет на https://domain.mobi

www.domain.pw перенаправляет на https://domain.info <<< Дох! wtf ??? >>>

Заметка: эта проблема существует только с www перенаправление отлично работает без него.

пожалуйста, помогите, эта штука меня беспокоит в течение нескольких дней, я перепутал свои файлы конфигурации, перезагрузил свой сервер, перевыпустил свои сертификаты ssl, и что бы это ни было, это всегда приводит к ошибке. Зачем?

Ваше перенаправление HTTP на HTTPS тонко неверно:

        return 301 https://$server_name$request_uri;

Это использует имя сервера, определенное в server блок, что, вероятно, не то, что вам нужно, особенно когда вы используете один server блокировка перенаправления нескольких доменов.

Вместо этого используйте:

        return 301 https://$http_host$request_uri;

Который будет использовать домен, предоставленный клиентом.