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

Nginx блокирует несколько доменов для перенаправления всего трафика на https?

У меня есть веб-сервер под управлением 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.