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

Nginx: перенаправление портов

Я использую nginx в качестве обратного прокси-сервера, и я хотел бы перенаправить порт 3000, предоставленный через URL-адрес, на тот же порт на проходе прокси, но при попытке я всегда перенаправляю на порт 443.

Ниже представлена ​​текущая конфигурация:

server {

    listen 80 ;
    listen 443 ssl;
    listen 3000 ssl;
    server_name example.com;
    ssl_certificate /etc/ssl/certs/example.fullchain.pem;
    ssl_certificate_key /etc/ssl/private/example.pem;
        location / {
                #auth_basic "Vous devez vous authentifier";
                #auth_basic_user_file /etc/nginx/htpasswd;
                if ($scheme = http) {
                    return 301 https://$server_name$request_uri;
                }
                proxy_pass http://10.10.10.10
                proxy_set_header Host $http_host;
                proxy_read_timeout  90;
        }
    location /.well-known/acme-challenge {
        root /var/www/letsencrypt;
    }
    # ...
}

Вы знаете, как попасть на http://10.10.10.10:3000 при доступе https://example.com:3000 ?

Редактировать:

Я также пробовал эту конфигурацию, как показано ниже, и у меня все еще та же проблема.

server {

    listen 80 ;
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /etc/ssl/certs/example.fullchain.pem;
    ssl_certificate_key /etc/ssl/private/example.pem;
        location / {
                #auth_basic "Vous devez vous authentifier";
                #auth_basic_user_file /etc/nginx/htpasswd;
                if ($scheme = http) {
                    return 301 https://$server_name$request_uri;
                }
                proxy_pass http://10.10.10.10;
                proxy_set_header Host $http_host;
                proxy_read_timeout  90;
        }
    location /.well-known/acme-challenge {
        root /var/www/letsencrypt;
    }
}

server {

    listen 3000 ssl;
    server_name example.com;
    ssl_certificate /etc/ssl/certs/example.fullchain.pem;
    ssl_certificate_key /etc/ssl/private/example.pem;
        location / {
                proxy_pass http://10.10.10.10:3000;
                proxy_set_header Host $http_host;
                proxy_read_timeout  90;
        }
    location /.well-known/acme-challenge {
        root /var/www/letsencrypt;
    }
}

Ваш второй подход с двумя серверными блоками верен. Вам просто нужно удалить редирект на https (который вернет запрос на порт 443).

server {

    listen 3000 ssl;
    server_name example.com;
    ssl_certificate /etc/ssl/certs/example.fullchain.pem;
    ssl_certificate_key /etc/ssl/private/example.pem;
        location / {
                proxy_pass http://10.10.10.10:3000;
                proxy_set_header Host $http_host;
                proxy_read_timeout  90;
        }
    location /.well-known/acme-challenge {
        root /var/www/letsencrypt;
    }
}