2016-07-15 2 views
1

У меня возникают проблемы с перенаправлением моих URL-адресов, отличных от www, и https.nginx перенаправить не-www на www и https для домена.com и поддомена

Что я хочу:

http://domain.com 
http://www.domain.com 
https://domain.com 

должен перенаправлять https://www.domain.com.

http://api.domain.com 

должен перенаправлять https://api.domain.com

У меня есть seperata ключи SSL для domain.com и api.domain.com. Настройки SSL для api.domain.com обрабатываются через приложение node.js. Кроме того domain.com использует корневой документ и api.domain.com использует proxy_pass к Node.js приложения на порт 1336.

То, что я пытался:

# route non ssl api to ssl 
server { 
    listen 80; 
    server_name api.domain.com; 
    return 301 https://api.domain.com; 
} 

# main ssl route for api.domain.com 
server { 
    listen 443 ssl; 

    server_name api.domain.com; 

    location/{ 
     proxy_pass https://localhost:1337; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection 'upgrade'; 
     proxy_set_header Host $host; 
     proxy_cache_bypass $http_upgrade; 
    } 
} 

# route non ssl to www ssl 
server { 
    listen  80; 
    server_name www.domain.com domain.com; 
    return  301 https://www.domain.com; 
} 

# route non www ssl to ssl 
server { 
    listen  443 ssl; 
    server_name domain.com; 
    return  301 https://www.domain.com; 
} 

# main ssl route for domain.com 
server { 
    listen 443 ssl; 

    ssl on; 
    ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; 

    server_name www.domain.com; 

    location/{ 
     root /var/www/domain.com/www; 
    } 
} 

маршрутов, которые работают, как и ожидалось: https://www.domain.com http://domain.com http://www.domain.com

не работает:

https://domain.com -> не безопасное подключение ион, потому что он пытается использовать сертификат от api.domain.com (это могло быть в кэш, потому что, возможно, я пробовал раньше другой способ, который был неправильно)

https://api.domain.com-> перенаправляет https://domain.com

http://api.domain.com -> перенаправляет https://domain.com

Nginx версии: Nginx/1.4.6 (Ubuntu)

ответ

3

я мог заставить его работать знаю. Одна из проблем было то, что Nginx маршрут

listen 443; 
server_name www.domain.com; 

также запуска для https://domain.com. Также отключение кэша в консоли Chrome Dev для тестирования было огромной помощью.

Полная конфигурация:

# main ssl route for www.domain.com 
server { 
    listen 443; 
    server_name www.domain.com; 

    ssl on; 
    ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; 

    root /var/www/domain.com/www; 
} 

# non-www ssl route 
server { 
    listen 443; 
    server_name domain.com; 

    return 301 https://www.domain.com$request_uri; 
} 

# route non ssl to www ssl 
server { 
    listen  80; 
    server_name www.domain.com domain.com; 
    return  301 https://www.domain.com$request_uri; 
} 

# route non ssl api to ssl 
server { 
    listen 80; 
    server_name api.domain.com; 
    return 301 https://api.domain.com$request_uri; 
} 

# main ssl route for api.domain.com 
server { 
    listen 443 ssl; 

    ssl on; 
    ssl_certificate /etc/letsencrypt/live/api.domain.com/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/api.domain.com/privkey.pem; 

    server_name api.domain.com; 

    location/{ 
     proxy_pass http://localhost:1337; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection 'upgrade'; 
     proxy_set_header Host $host; 
     proxy_cache_bypass $http_upgrade; 
    } 
} 
Смежные вопросы