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

nginx принимает запросы HTTP и HTTPS на двух разных портах

У меня есть одна установка сервера nginx (два файла конфигурации) с двумя установленными и запущенными веб-серверами Gunicorn. Один пулеметчик - производство, другой - постановка.

Я хочу, чтобы nginx обслуживал http-запросы к xyz.com, а также https-запросы к xyz.com на производственный сервер gunicorn @ 127.0.0.1:8000.

Я добился этого с помощью:

server {
   listen 80;
   server_name xyz.com;
   return 301 https://$http_host$request_uri;
}

server {
   listen 443 ssl;
   server xyz.com;
   ..... <<< ssl stuff
  location /{
      .... proxy_stuff
      proxy_pass http://127.0.0.1:8000;
  }
}

Я также хочу, чтобы трафик http на xyz.com:8080 и трафик https на xyz.com:8080 попадал на промежуточный сервер @ 127.0.0.1:8081. Мне удалось получить https-трафик на xyz.com:8080, работая следующим образом:

server {
   listen 8080 ssl;
   server_name xyz.com;
   ...... << ssl stuff
   location / {
      ...... << proxy stuff
      proxy_pass http://127.0.0.1:8081;
   }
}

Но я не могу найти способ перенаправить http-трафик на xyz.com:8080 на https-трафик на xyz.com:8080. Я пробовал то же перенаправление, что и с портом 80, но безуспешно.

Мог бы использовать какое-то направление.

Основываясь на том, что вы сказали, вы хотите прослушивать http и https на порту 8080, что я не верю в это возможно. Настройте разные серверные блоки для разных портов, с блоком местоположения внутри у вас может быть один и тот же proxy_pass для передачи куда угодно.

Вероятно, это самое близкое к тому, что вы сказали, - прослушивание 8080 http, 8081 https и пересылка с http на https. Переписывание может быть не совсем правильным, но идею вы поняли.

server {
  listen 8080; # HTTP
  server_name example.com;
  rewrite ^ https://example.com:8081$request_uri? redirect;
  # rewrite ^ https://example.com:8081 redirect; # Alternate rewrite
}

server {
  listen 8081 ssl;
  server_name example.com;
  // ...... << ssl stuff
  location / {
    // ...... << proxy stuff to forward to http
    proxy_pass http://127.0.0.1:8080;
    // If you are not proxying to a service on the same server you can use the line below
    // proxy_pass http://example.com:8080; 
  }
}