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

Прокси-сервер поддомена Nginx

Я хочу перенаправить не-ssl-трафик на ssl для всех поддоменов. Я хочу, чтобы поддомен остался прежним. Я хочу указать другой proxy_pass для staging.foo.com. У меня сейчас только 3 дела foo.com, www.foo.com и staging.foo.com. Я хочу, чтобы прокси-сервер передавал пустой домен и www на localhost 8000. И прокси-сервер передает staging поддомен на localhost 8001.

http://foo.com/ -> https://foo.com/ -proxy-> 127.0.0.1:8000
http://www.foo.com/ -> https://www.foo.com/ -proxy-> 127.0.0.1:8000
http://staging.foo.com/ -> https://staging.foo.com/ -proxy-> 127.0.0.1:8001

При следующих условиях весь трафик на www или staging перенаправляется на пустой домен. Что я делаю не так?

server {
        listen 80;
        server_name foo.com www.foo.com staging.foo.com;
        rewrite ^ https://$server_name$request_uri? permanent;
}
server {
        listen 443;
        server_name foo.com www.foo.com;
        # ...
        location / {
          proxy_pass    http://127.0.0.1:8000/;
          # ...
        }
}
server {
        listen 443;
        server_name staging.foo.com;
        # ...
        location / {
          proxy_pass    http://127.0.0.1:8001/;
          # ...
        }
}

Сначала измените server {} раздел в:

server {
        listen 80;
        server_name foo.com www.foo.com staging.foo.com;
        return 301 https://$host$request_uri;
}

Заметка $server_name -> $host, это решение вашей проблемы. Замена redirect к return не обязательно, но гораздо лучше.