Публикация http-сервисов за NAT с помощью Fast Reverse Proxy

1. Установка Fast Reverse Proxy

Качаем дистрибутив с github:

https://github.com/fatedier/frp

Распаковываем себе в /home:

/home/<user>/frps

На сервер, и на каждый клиент.

На сервере нужны файлы frps и frps.ini на клинте, соответственно frpc и frpc.ini

Правим конфиги. В качестве примера приведем внутренний веб-сервис, слушающий по http на 4040 порту.

2. Конфиг сервера

frps.ini

[common]
bind_port = 7000
subdomain_host=<your_domain_here>
vhost_http_port=7000

3. Конфиг клиента

frpc.ini

[common]
server_addr = <server IP or domain>
server_port = 7000

[service_name]
type = http
local_ip = localhost
local_port = 4040
subdomain = <subdomain prefix, e.g. mapnik>

4. Запускаем сервер, потом каждый из клиентов

Сервер:

./frps -c ./frps.ini

Клиент:

./frpc -c ./frpc.ini

5. Настраиваем reverse-proxy в nginx

Для домена <subdomain prefix>.<your_domain_here> перенаправляем все на 7000 порт:

# proxy to localhost:7000
server {
    listen      80;
    server_name <subdomain prefix>.<your_domain_here> *.<subdomain prefix>.<your_domain_here>;
    location / {
        proxy_pass http://localhost:7000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection keep-alive;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

server {

    # Setup HTTPS certificates
    listen       443;
    server_name  <subdomain prefix>.<your_domain_here>;
    ssl_certificate      /etc/letsencrypt/live/.<your_domain_here>/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/<your_domain_here>/privkey.pem;

    # Proxy to localhost:7000
    location / {
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Host  $http_host;
        proxy_set_header Host              $http_host;
        proxy_max_temp_file_size           0;
        proxy_pass                              http://localhost:7000;
    }
}

6. Проверяем

Все запросы на <subdomain prefix>.<your_domain_here> будут перенаправляться nginx-ом на вешнем сервере на 7000 порт, который слушает FRP-server и в свою очередь перенаправляет на локальную машину, где слушает FRP-clinet и перенаправляет вашему внутреннему сервису на 4040-ой порт.

См. также


Создано: 12/01/2023 15:58, Изменено: 14/01/2023 22:34, Просмотров: 241
Назад