Как сохранить запрошенный порт при использовании прокси-прохода? - PullRequest
0 голосов
/ 09 февраля 2019

В долгосрочной перспективе я пытаюсь подключиться к любому домену через любой порт, например, mysite.com:8000, а затем через Nginx направить его на внутренний ip через тот же порт.Так, например, к 192.168.1.114:8000.

Я изучил iptables, хотя планирую иметь несколько доменов, чтобы в этом случае мне это не помогло (не стесняйтесь исправлять меня, если я ошибаюсь).Я убедился, что внутренние ip и порт, к которому я пытаюсь получить доступ, подключаемы и работают, а также что порты, с которыми я тестирую, доступны из-за пределов моей сети.

Вот мой конфиг Nginx, который я 'В настоящее время используется:

server {
   set $server "192.168.1.114";
   set $port $server_port;

   listen 80;
   listen 443;
   listen 9000;

   server_name mysite.com;

   location / {
      proxy_pass http://$server:$port;
      proxy_set_header Host $host:$server_port;
   }
}

В настоящее время происходит то, что когда я отправляю запрос, он просто истекает.Я тестировал порт 80, а также порт 9000.Любые идеи о том, что я могу делать не так?Спасибо!

РЕДАКТИРОВАТЬ:

Я изменил свой конфигурационный файл, чтобы он выглядел следующим образом

server {

  listen 9000;

  server_name _;

  location / {
    add_header Content-Type text/html;
    return 200 'test';
  }

Я продолжаю получать ту же самую точную ошибку.Брандмауэр отключен, поэтому кажется, что Nginx не прослушивает порт 9000. Есть идеи, почему это так?

1 Ответ

0 голосов
/ 11 февраля 2019

Наиболее эффективным способом было бы иметь три отдельные директивы сервера, по одной для каждого порта.Таким образом, вышестоящий сервер не является динамическим, поэтому Nginx знает, что он может поддерживать долгоживущие соединения открытыми для каждого из них.

Если вы действительно не хотите этого делать, вы можете обойтисьэто делает что-то вроде этого:

proxy_pass http://upstream_server.example:$server_port;

$port не существует, но $server_port делает , так что должно работать.(Это не $ port, потому что для каждого соединения есть два порта: порт сервера и порт клиента, которые соответственно равны $ server_port и $ remote_port.)

...