2015-02-19 4 views
0

В моей конфигурации Nginx я хотел бы, чтобы одна служба была доступна с помощью http, а все остальные должны быть доступны через https и принудительно подключаться к ssl при попытке подключения с http. Это мой конфиг:Проблема с именем сервера Nginx

server{ 
    server_name localhost; 
    listen 80; 
    proxy_http_version 1.1; 

    location /services/ { 
     proxy_pass http://localhost:47440/; 
    } 

    listen/{ 
     rewrite ^ https://$server_name$request_uri? permanent; 

} 


server{ 
    server_name localhost_ssl; 
    listen 443 ssl; 
    ssl_certificate /etc/nginx/ssl/mycert.crt; 
    ssl_certificate_key /etc/nginx/ssl/mycert.key; 
    proxy_http_version 1.1; 

    location /db/ { 
     proxy_pass http://localhost_ssl:8084/; 
    } 
} 

Моя проблема заключается в том, что при попытке перезагрузки я получаю эту ошибку:

host not found in upstream "localhost_ssl" in /etc/nginx/nginx.conf:46 

Любая идея, почему это происходит?

ответ

0

У вас есть эта ошибка, потому что nginx не может найти хост «localhost_ssl». В действительности это не существует, если вы не укажете его с директивой upstream (или в файле hosts, который, как мне кажется). Вы должны установить его на proxy_pass http://localhost:8084/;, если ваш сервис действительно прослушивает 127.0.0.1:8084.

Кроме того, вы можете заменить listen/{ на location/{.

UPDATE: Если доступ к серверу с IP (вы не имеете доменное имя), то вы можете удалить server_name директиву:

server { 
    listen 80; 
    proxy_http_version 1.1; 

    location /services { 
     proxy_pass http://localhost:47440/; 
     proxy_set_header Host $host; 
    } 

    location/{ 
     return 301 https://$host$request_uri?; # Replace $server_name by $host 
    } 


server { 
    listen 443 ssl; 
    ssl_certificate /etc/nginx/ssl/mycert.crt; 
    ssl_certificate_key /etc/nginx/ssl/mycert.key; 
    proxy_http_version 1.1; 

    location /db { 
     proxy_pass http://localhost:8084/; 
     proxy_set_header Host $host; 
    } 
} 

Этот конфиг перенаправляет запросы, полученные на порт 80, 443, если они не соответствуют location /services. Запросы, полученные на порту 443, проксируются, если они соответствуют location /db.

Но это то, чего вы действительно хотите достичь? Я имею в виду, что запрос на порт 443 для/test не будет соответствовать ни одному местоположению, поскольку есть только /db.

+0

Мне нужно перепроверить это, но я, вероятно, пробовал это, и я думаю, что это перенаправляло мой браузер с http IP/db на https localhost/db, что явно не имеет смысла, поскольку перенаправление должно произойти на сервере. Но мне нужно перепроверить. – splinter123

+0

Проверьте строки, которые я только что добавил. Вам нужно изменить заголовки. Но это другая проблема, для которой вам легко найти существующие вопросы – Lich4r

1

Кажется, что ваш DNS-резольвер по какой-то причине не работает. Попробуйте добавить: варианты одного запроса

в /etc/resolv.conf Это приводит к IPv6/v4 поиски быть сделано последовательно.

Смежные вопросы