nginx reverse proxy: водич
На оваа страница
Reverse proxy стои пред вашите апликации и им ги проследува барањата на посетителите. Со nginx напред, Node.js апликација, Docker контејнер или контролна табла што работи на некоја порта станува https://app.example.com, со HTTPS, правилни заглавија и едно место од каде управувате со сè.
Овој водич чекор по чекор го поставува nginx како reverse proxy на Ubuntu: server блокот, заглавијата, WebSockets, бесплатен HTTPS и грешките на кои најверојатно ќе наидете.
Што прави reverse proxy
- Една јавна влезна точка. nginx слуша на портите 80 и 443 и го проследува секој домен или патека до вистинската апликација, па самите апликации никогаш не се изложени на интернетот.
- HTTPS на едно место. nginx се грижи за сертификатите; апликациите зад него можат да зборуваат обичен HTTP на localhost.
- Повеќе апликации на еден сервер.
app.example.com,api.example.comиexample.com/blogможат секој да оди до различен сервис. - Дополнително: компресија, кеширање, ограничувања за прикачување и правила за пристап, без да ја допирате апликацијата.
Чекор 1: Инсталирајте nginx
sudo apt update sudo apt install nginx
Отворете http://your-server-ip и треба да ја видите страницата за добредојде на nginx. Ако користите ufw, дозволете веб сообраќај со sudo ufw allow 'Nginx Full'.
Проверете дали апликацијата работи и е достапна на самиот сервер, на пример со curl http://127.0.0.1:3000. Ако тоа не успее, нема да успее ни nginx.
Извршувајте nginx и вашите апликации со целосен root: HytHost KVM VPS пакетите почнуваат од €2.92/мес.
Погледнете VPS пакетиЧекор 2: Направете proxy server блок
На Ubuntu секој сајт добива датотека во /etc/nginx/sites-available/, која се вклучува со врска во sites-enabled. Направете /etc/nginx/sites-available/app.example.com:
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
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_set_header X-Forwarded-Proto $scheme;
}
}
Вклучете го, тестирајте ја конфигурацијата и превчитајте:
sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx
Насочете го A записот на доменот кон вашиот сервер и http://app.example.com сега ја прикажува вашата апликација. Секогаш извршете nginx -t пред превчитување: така ги фаќа грешките пред да го срушат сајтот.
Заглавијата и завршната коса црта
Hostго пренесува доменот што го побарал посетителот. Без него nginx ја праќа адресата одproxy_pass, а апликациите што градат линкови од host-от се расипуваат.X-Real-IPиX-Forwarded-Forја пренесуваат IP адресата на посетителот. Без нив секое барање изгледа како да дошло од127.0.0.1.X-Forwarded-Protoѝ кажува на апликацијата дали посетителот користел HTTPS, за да не пренасочува во круг.
Пакетот nginx на Ubuntu ги содржи овие линии во /etc/nginx/proxy_params, па include proxy_params; е кратенка.
Завршната коса црта е важна. За апликација под патека:
location /app/ {
proxy_pass http://127.0.0.1:3000/;
}
Со коса црта по портата, /app/login стигнува до апликацијата како /login. Без неа, апликацијата го добива целото /app/login.
WebSockets
Апликациите за разговор, live контролните табли и многу админ панели користат WebSockets, на кои им требаат две дополнителни заглавија. Додајте го овој map еднаш, во блокот http, на пример во нова датотека /etc/nginx/conf.d/websocket.conf:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
Потоа во location:
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 1h;
nginx ја затвора проксираната врска што не праќа ништо 60 секунди; подолгиот proxy_read_timeout ги држи тивките WebSockets отворени. proxy_http_version 1.1 е стандарден дури од nginx 1.29.7, а Ubuntu 24.04 доаѓа со 1.24, затоа оставете ја линијата.
Чекор 3: Бесплатен HTTPS со Certbot
sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/local/bin/certbot sudo certbot --nginx -d app.example.com
Certbot добива бесплатен Let's Encrypt сертификат, ги додава HTTPS поставките во вашиот server блок и може да пренасочува HTTP кон HTTPS. Сертификатот го обновува автоматски; проверете со sudo certbot renew --dry-run. Повеќе за сертификатите во како да добиете бесплатен SSL сертификат.
Решавање на грешките 502, 504 и 413
| Грешка | Вообичаена причина | Решение |
|---|---|---|
| 502 Bad Gateway | nginx не може да стигне до апликацијата: таа е запрена, паднала или слуша на друга порта или адреса | Стартувајте ја апликацијата, проверете ја портата со curl http://127.0.0.1:PORT, прочитајте /var/log/nginx/error.log |
| 504 Gateway Timeout | На апликацијата ѝ требале повеќе од 60 секунди да одговори | Забрзајте го барањето или зголемете го proxy_read_timeout за таа location |
| 413 Request Entity Too Large | Прикачувањето е поголемо од стандардното ограничување на nginx од 1 MB | Поставете client_max_body_size 50m; во server блокот |
| Јамка на пренасочување | Апликацијата не знае дека посетителот користел HTTPS | Пренесете X-Forwarded-Proto и кажете ѝ на апликацијата дека е зад proxy |
По секоја промена: sudo nginx -t, потоа sudo systemctl reload nginx.
Извршувајте го на HytHost VPS
На reverse proxy му треба сервер каде ги контролирате портите 80 и 443. HytHost VPS пакетите работат на KVM со целосен root пристап, SSD складиште и DDoS заштита; изберете Ubuntu 24.04 и следете ги чекорите погоре. Ги извршувате апликациите во контејнери? Прво поставете Docker со како да инсталирате Docker на Ubuntu и врзете ги портите на контејнерите за 127.0.0.1, за само nginx да може да стигне до нив.
Често поставувани прашања
Reverse proxy ги проследува барањата до една или повеќе апликации зад него. Load balancer е reverse proxy што ги распределува барањата меѓу неколку копии на истата апликација. nginx може и двете, со блок upstream во кој се наведени копиите.
nginx не може да стигне до апликацијата зад него. Проверете дали апликацијата работи и слуша на адресата и портата од proxy_pass и прочитајте /var/log/nginx/error.log за точната причина.
Не, кога апликацијата работи на истиот сервер. nginx се грижи за HTTPS за посетителите и со апликацијата разговара преку обичен HTTP на 127.0.0.1, што никогаш не ја напушта машината.
Дајте ѝ на секоја апликација свој server блок со свој server_name, како app.example.com и api.example.com, секој со proxy_pass кон различна порта.
Да. Објавете ја портата на секој контејнер само на 127.0.0.1 и насочете го proxy_pass кон неа. Така контејнерите остануваат надвор од јавниот интернет, што е важно бидејќи објавените порти на Docker го заобиколуваат ufw.
Хостирајте ги вашите апликации зад nginx
HytHost KVM VPS пакетите со целосен root пристап, SSD складиште и DDoS заштита почнуваат од €2.92/мес.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursДали овој водич ви беше корисен?