Android

Pagse-set up ng isang nginx reverse proxy

Configuring nginx as a reverse proxy for web application

Configuring nginx as a reverse proxy for web application

Talaan ng mga Nilalaman:

Anonim

Ang isang reverse proxy ay isang serbisyo na tumatanggap ng isang kahilingan ng kliyente, ipinapadala ang kahilingan sa isa o higit pang mga na-prox na server, kinuha ang tugon, at inihatid ang tugon ng server sa kliyente.

Dahil sa pagganap at scalability nito, ang NGINX ay kadalasang ginagamit bilang reverse proxy para sa mga server ng HTTP at non-HTTP. Ang isang karaniwang reverse proxy na pagsasaayos ay upang ilagay ang Nginx sa harap ng Node.js, Python, o Java application.

Ang paggamit ng Nginx bilang isang reverse proxy ay nagbibigay sa iyo ng maraming karagdagang mga benepisyo:

  • Ang Pagbabalanse ng Load - Maaaring magawa ng Nginx ang pagbabalanse ng pag-load upang ipamahagi ang mga kahilingan ng mga kliyente sa mga proxied server, na nagpapabuti sa pagganap, scalability, at pagiging maaasahan. Caching - Sa Nginx bilang isang reverse proxy, maaari mong i-cache ang pre-render na mga bersyon ng mga pahina upang mapabilis ang mga oras ng pag-load ng pahina. Gumagana ito sa pamamagitan ng pag-cache ng nilalaman na natanggap mula sa mga proxied na mga tugon ng server at ginagamit ito upang tumugon sa mga kliyente nang hindi kinakailangang makipag-ugnay sa mga na-proxied server para sa parehong nilalaman sa bawat oras. Pagwawakas ng SSL - Ang Nginx ay maaaring kumilos bilang isang pagtatapos ng SSL para sa mga koneksyon sa mga kliyente. Ito ay hawakan at i-decrypt ang mga papasok na koneksyon sa SSL at i-encrypt ang mga tugon ng proxied server. Compression - Kung ang proxied server ay hindi nagpapadala ng mga naka-compress na mga tugon, maaari mong i-configure ang Nginx upang i-compress ang mga tugon bago ipadala ang mga ito sa mga kliyente. Pagganyak ng DDoS Attacks - Maaari mong limitahan ang mga papasok na kahilingan at bilang ng mga koneksyon sa bawat solong IP address sa isang halagang karaniwang para sa mga regular na gumagamit. Pinapayagan ka ng Nginx na hadlangan o higpitan ang pag-access batay sa lokasyon ng kliyente, at ang halaga ng mga header ng kahilingan tulad ng "User-Agent" at "Referer".

Inilarawan ng artikulong ito ang mga hakbang na kinakailangan para sa pag-configure ng Nginx bilang isang reverse proxy.

Mga kinakailangan

Ipinapalagay namin na na-install mo ang Nginx sa iyong Ubuntu, CentOS, o server ng Debian.

Paggamit ng Nginx bilang isang Reverse Proxy

Upang i-configure ang Nginx bilang isang reverse proxy sa isang server ng HTTP, buksan ang file ng pagsasaayos ng block ng server ng domain at tukuyin ang isang lokasyon at isang na-proxied server sa loob nito:

server { listen 80; server_name www.example.com example.com; location /app { proxy_pass http://127.0.0.1:8080; } }

Ang proxied server URL ay nakatakda gamit ang proxy_pass at maaaring gumamit ng HTTP o HTTPS bilang protocol, domain name o IP address, at isang opsyonal na port at URI bilang isang address.

Ang pagsasaayos sa itaas ay nagsasabi kay Nginx na ipasa ang lahat ng mga kahilingan sa /app lokasyon ng /app sa na-proxied server sa http://127.0.0.1:8080 .

Sa mga pamamahagi batay sa Ubuntu at Debian, ang mga file ng block ng server ay naka-imbak sa /etc/nginx/sites-available direktoryo na /etc/nginx/sites-available direktoryo, habang sa direktoryo ng CentOS sa /etc/nginx/conf.d .

Upang mas mahusay na mailarawan kung paano gumagana ang location at proxy_pass direktiba, gawin natin ang sumusunod na halimbawa:

server { listen 80; server_name www.example.com example.com; location /blog { proxy_pass http://node1.com:8000/wordpress/; } }

Kung ang pag-access ng isang bisita sa http://example.com/blog/my-post , i-proxy ng Nginx ang kahilingang ito sa http://node1.com:8000/wordpress/my-post .

Kapag ang address ng proxied server ay naglalaman ng isang URI, ( /wordpress/ ), ang kahilingan na URI na ipinasa sa proxied server ay pinalitan ng isang URI na tinukoy sa direktiba. Kung ang address ng proxied server ay tinukoy nang walang isang URI, ang buong kahilingan ng URI ay ipinasa sa proxied server.

Pagpapasa ng mga Header Hiling

Kapag nag-proxies ng Nginx ang isang kahilingan, awtomatikong tinutukoy nito ang dalawang patlang ng header sa isang na-prox na mga kahilingan mula sa kliyente, Host at Connection , at tinatanggal ang mga walang laman na mga header. Host ay nakatakda sa variable na $proxy_host , at nakatakdang isara ang Connection .

Upang ayusin o itakda ang mga header para sa mga na-prox na koneksyon, gamitin ang direktiba ng proxy_set_header , na sinusundan ng halaga ng header. Maaari kang makahanap ng isang listahan ng lahat ng magagamit na Mga Hiling sa Mga Hiling at ang kanilang pinapayagan na mga halaga dito. Kung nais mong maiwasan ang isang header na maipasa sa proxied server, itakda ito sa isang walang laman na string "" .

Sa sumusunod na halimbawa, binabago namin ang halaga ng larangan ng Host header sa $host at tinanggal ang patlang ng Accept-Encoding pamamagitan ng pagtatakda ng halaga nito sa isang walang laman na string.

location / { proxy_set_header Host $host; proxy_set_header Accept-Encoding ""; proxy_pass http://localhost:3000; }

Tuwing baguhin mo ang file ng pagsasaayos, kailangan mong i-restart ang serbisyo ng Nginx para sa bisa ng mga pagbabago.

Ang pag-configure ng Nginx bilang isang Reverse Proxy sa isang non-HTTP na proxied server

Upang i-configure ang Nginx bilang isang reverse proxy sa isang non-HTTP na proxied server, maaari mong gamitin ang mga sumusunod na direktiba:

  • fastcgi_pass - baligtarin ang proxy sa isang server ng FastCGI. uwsgi_pass - baligtarin ang proxy sa isang server ng uwsgi. scgi_pass - baligtarin ang proxy sa isang server ng SCGI. memcached_pass - baligtarin ang proxy sa isang Memcached server.

Ang isa sa mga pinaka-karaniwang halimbawa ay ang paggamit ng Nginx bilang isang reverse proxy sa PHP-FPM:

server { #… other directives location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; } }

Karaniwang Mga Pagpipilian sa Reverse Proyekto Nginx

Ang paghahatid ng nilalaman sa paglipas ng HTTPS ay naging pamantayan sa kasalukuyan. Sa bahaging ito, bibigyan ka namin ng isang halimbawa ng pagsasaayos ng proxy ng HTTPS Nginx kasama ang inirekumendang mga parameter ng Panginx na proxy at header.

location/ { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_cache_bypass $http_upgrade; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; 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; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; }

  • proxy_http_version 1.1 - proxy_http_version 1.1 ng HTTP para sa pag-prox, sa pamamagitan ng default na ito ay nakatakda sa 1.0. Para sa mga Websockets at panatilihing mga koneksyon kailangan mong gamitin ang bersyon 1.1. proxy_cache_bypass $http_upgrade - Nagtatakda ng mga kondisyon kung saan ang tugon ay hindi makuha mula sa isang cache. Upgrade $http_upgrade at Connection "upgrade" - Ang mga patlang ng header na ito ay kinakailangan kung ang iyong aplikasyon ay gumagamit ng Websockets. Host $host - Ang $host variable sa sumusunod na pagkakasunud-sunod ng pagkakasunud-sunod ay naglalaman ng: hostname mula sa linya ng kahilingan, o hostname mula sa field ng header ng kahilingan ng Host , o ang pangalan ng server na tumutugma sa isang kahilingan. X-Real-IP $remote_addr - Ipasa ang totoong remote IP address ng bisita sa proxied server. X-Forwarded-For $proxy_add_x_forwarded_for - Isang listahan na naglalaman ng mga IP address ng bawat server na na- X-Forwarded-For $proxy_add_x_forwarded_for ng kliyente. X-Forwarded-Proto $scheme - Kapag ginamit sa loob ng isang bloke ng server ng HTTPS, ang bawat tugon ng HTTP mula sa proxied server ay muling isinulat sa X-Forwarded-Host $host - Tinukoy ang orihinal na host na hiniling ng kliyente. X-Forwarded-Port $server_port - X-Forwarded-Port $server_port ang orihinal na port na hiniling ng kliyente.

Konklusyon

Nalaman mo kung paano gamitin ang Nginx bilang isang Reverse Proxy. Ipinakita namin sa iyo kung paano ipasa ang mga karagdagang mga parameter sa server at upang baguhin at itakda ang iba't ibang mga patlang ng header sa mga hiniling na mga kahilingan.

nginx