Как использовать обратный прокси NGINX и указать порт и путь к исходящему URL?

#nginx #reverse-proxy

#nginx #обратный прокси

Вопрос:

Я настроил обратный прокси-сервер nginx в соответствии с приведенными здесь инструкциями:https://medium.com/@mightywomble/how-to-set-up-nginx-reverse-proxy-with-lets-encrypt-8ef3fd6b79e5

My sites-enabled /mysite.conf выглядит следующим образом

 server {      
 server_name mynginxreverseproxy.com; 
 set $upstream serverip:$server_port/; 
 location / {  
    proxy_pass_header Authorization;  
    proxy_pass http://$upstream;  
    proxy_set_header Host $host;  
    proxy_set_header X-Real-IP 
    $remote_addr; 
    proxy_set_header X-Forwarded-For 
    $proxy_add_x_forwarded_for;  
    proxy_http_version 1.1;  
    proxy_set_header Connection “”;  
    proxy_buffering off;  
    client_max_body_size 0;  
    proxy_read_timeout 36000s;  
    proxy_redirect off;  }

    listen 443 ssl; # paths to ssl cert files

} server {
    if ($host = mynginxreverseproxy.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


 server_name mynginxreverseproxy.com; listen 80;
    return 404; 

}
  

Я хотел бы перенаправить порт и путь на мой сервер, напримерhttps://mynginxreverseproxy.com:portnumber/myurl -> к serverip:com:portnumber/myurl. Я смог заставить это работать для одного порта, который может перенаправлять порт 80 на мой нужный порт, но как мне масштабировать его, чтобы он работал для многих портов?

У меня есть много сопоставлений портов, которые я хотел бы настроить, поэтому было бы идеально сделать это с помощью переменной, а не жестко кодировать каждое сопоставление портов.

Как мне передать порт и путь с помощью переменной в файле conf?

Ответ №1:

В конце концов, я заставил это работать после множества отладок и настроек.

The

set $upstream serverip:$server_port

было правильно, но мне не хватало

listen директива, которая позволяет серверу NGINX прослушивать определенный порт, по умолчанию он прослушивает порт 80. Однако порт 80 не был тем портом, который я хотел передать на вышестоящий сервер.

Ответ №2:

Возможно, кому-то это покажется полезным, есть онлайн-утилита, где вы можете сгенерировать конфигурацию nginx. Очень удобный для пользователя

Вы можете найти это здесь

Ответ №3:

Другой способ сделать это (пример конфигурации ниже)

 upstream myserver {
    server ip-address:port;
}

server {
  listen 80;      //IPv4
  listen [::]:80; //IPv6
  location / {
    proxy_pass http://myserver /;
    proxy_set_header Host $http_host;
    ...rest of your headers...
  }
}