Android

Bir nginx ters proxy kurma

Swarm - Обратный прокси NGINX Reverse Proxy

Swarm - Обратный прокси NGINX Reverse Proxy

İçindekiler:

Anonim

Ters proxy, bir istemci isteği alan, isteği bir veya daha fazla proxy sunucusuna gönderen, yanıtı alan ve sunucunun istemciye yanıtını veren bir hizmettir.

Performansı ve ölçeklenebilirliği nedeniyle NGINX, HTTP ve HTTP olmayan sunucular için genellikle ters proxy olarak kullanılır. Tipik bir ters proxy yapılandırması, Nginx'i Node.js, Python veya Java uygulamalarının önüne koymaktır.

Nginx'i ters proxy olarak kullanmak size birkaç ek avantaj sağlar:

  • Yük Dengeleme - Nginx, istemcilerin isteklerini proxy sunuculara dağıtarak performansı, ölçeklenebilirliği ve güvenilirliği artıran yük dengelemesi gerçekleştirebilir. Önbellekleme - Nginx'i ters proxy olarak kullanarak, sayfa yükleme sürelerini hızlandırmak için sayfaların önceden oluşturulmuş sürümlerini önbelleğe alabilirsiniz. Proxy sunucuların yanıtlarından alınan içeriği önbelleğe alarak ve proxy sunucusuna her seferinde aynı içerik için başvurmak zorunda kalmadan istemcilere yanıt vermek için kullanarak çalışır. SSL Sonlandırması - Nginx, istemcilerle bağlantılar için bir SSL bitiş noktası görevi görebilir. Gelen SSL bağlantılarını yönetir ve şifresini çözer ve proxy sunucusunun yanıtlarını şifreler. Sıkıştırma - Proxy sunucusu sıkıştırılmış yanıtlar göndermezse, istemcilere göndermeden önce Nginx'i yanıtları sıkıştıracak şekilde yapılandırabilirsiniz. DDoS Saldırılarını Azaltma - Tek bir IP adresi başına gelen istekleri ve bağlantı sayısını normal kullanıcılar için tipik bir değerle sınırlandırabilirsiniz. Nginx ayrıca istemci konumuna ve “User-Agent” ve “Referer” gibi istek başlıklarının değerine göre erişimi engellemenize veya kısıtlamanıza olanak tanır.

Bu makalede, Nginx'i ters proxy olarak yapılandırmak için gereken adımlar açıklanmaktadır.

Ön şartlar

Ubuntu, CentOS veya Debian sunucunuzda Nginx'in yüklü olduğunu varsayıyoruz.

Nginx'i Ters Proxy Olarak Kullanma

Nginx'i bir HTTP sunucusunun ters proxy'si olarak yapılandırmak için etki alanının sunucu bloğu yapılandırma dosyasını açın ve içinde bir konum ve proxy sunucusu belirtin:

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

Proxy sunucu URL'si proxy_pass yönergesi kullanılarak ayarlanır ve HTTP veya HTTPS protokol, etki alanı adı veya IP adresi ve isteğe bağlı bir bağlantı noktası ve URI'yi adres olarak kullanabilir.

Yukarıdaki yapılandırma Nginx'e /app konumuna tüm istekleri http://127.0.0.1:8080 adresindeki proxy sunucusuna aktarmasını bildirir.

Ubuntu ve Debian tabanlı dağıtımlarda, sunucu blok dosyaları /etc/nginx/sites-available dizininde, CentOS /etc/nginx/conf.d dizininde /etc/nginx/conf.d .

location ve proxy_pass yönergelerinin nasıl çalıştığını daha iyi göstermek için aşağıdaki örneği alalım:

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

Bir ziyaretçi http://example.com/blog/my-post adresine erişirse, Nginx bu isteği http://node1.com:8000/wordpress/my-post .

Proxy sunucusunun adresi bir URI ( /wordpress/ ) içerdiğinde, proxy sunucusuna iletilen istek URI'sı yönergede belirtilen bir URI ile değiştirilir. Proxy sunucusunun adresi URI olmadan belirtilirse, tam istek URI'si proxy sunucusuna iletilir.

Geçen İstek Başlıkları

Nginx bir isteği proxy olarak oluşturduğunda, istemciden, Host ve Connection proxy isteminde iki başlık alanını otomatik olarak tanımlar ve boş üstbilgileri kaldırır. Host $proxy_host değişkenine ayarlandı ve Connection kapanacak şekilde ayarlandı.

Proxy bağlantıları için üstbilgileri ayarlamak veya ayarlamak için proxy_set_header yönergesini ve ardından üstbilgi değerini kullanın. Mevcut tüm İstek Üstbilgilerinin ve izin verilen değerlerinin bir listesini burada bulabilirsiniz. Bir başlığın proxy sunucusuna iletilmesini önlemek istiyorsanız, boş bir "" dizesine ayarlayın.

Aşağıdaki örnekte, Host üstbilgisi alanının değerini $host olarak değiştiriyoruz ve değerini boş bir dizeye ayarlayarak Accept-Encoding üstbilgisi alanını kaldırıyoruz.

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

Yapılandırma dosyasını her değiştirdiğinizde, değişikliklerin etkili olması için Nginx hizmetini yeniden başlatmanız gerekir.

HTTP olmayan proxy sunucusuna Nginx'i Ters Proxy olarak yapılandırma

Nginx'i HTTP proxy olmayan bir sunucunun ters proxy'si olarak yapılandırmak için aşağıdaki yönergeleri kullanabilirsiniz:

  • fastcgi_pass - proxy'yi bir FastCGI sunucusuna tersine çevirir. uwsgi_pass - proxy'yi bir uwsgi sunucusuna tersine çevirir. scgi_pass - proxy'yi bir SCGI sunucusuna ters çevirir. memcached_pass - Proxy'yi Memcached sunucusuna tersine çevirir.

En yaygın örneklerden biri, PHP-FPM için ters proxy olarak Nginx kullanmaktır:

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

Ortak Nginx Ters Proxy Seçenekleri

HTTPS üzerinden içerik sunmak günümüzde bir standart haline gelmiştir. Bu bölümde, önerilen Nginx proxy parametreleri ve başlıkları da dahil olmak üzere HTTPS Nginx ters proxy yapılandırmasına bir örnek vereceğiz.

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 için HTTP protokolü sürümünü tanımlar, varsayılan olarak 1.0'a ayarlar. Websockets ve kalıcı bağlantılar için 1.1 sürümünü kullanmanız gerekir. proxy_cache_bypass $http_upgrade - proxy_cache_bypass $http_upgrade önbellekten alınmayacağı koşulları belirler. Upgrade $http_upgrade ve Connection "upgrade" - Uygulamanız Web Soketleri kullanıyorsa bu başlık alanları gereklidir. Host $host - Aşağıdaki öncelik sırasına göre $host değişkeni şunları içerir: istek satırından hostname veya Host istek başlığı alanından hostname veya bir taleple eşleşen sunucu adı. X-Real-IP $remote_addr - Gerçek ziyaretçi uzak IP adresini proxy sunucusuna iletir. X-Forwarded-For $proxy_add_x_forwarded_for - İstemcinin proxy üzerinden geçirildiği her sunucunun IP adreslerini içeren bir liste. X-Forwarded-Proto $scheme - Bir HTTPS sunucu bloğu içinde kullanıldığında, proxy sunucusundan gelen her HTTP yanıtı HTTPS'ye yeniden yazılır. X-Forwarded-Host $host - İstemci tarafından istenen orijinal ana bilgisayarı tanımlar. X-Forwarded-Port $server_port - İstemci tarafından istenen orijinal bağlantı noktasını tanımlar.

Sonuç

Nginx'i Ters Proxy olarak kullanmayı öğrendiniz. Ayrıca, sunucuya ek parametrelerin nasıl iletileceğini ve proxy isteklerde farklı başlık alanlarını nasıl değiştireceğinizi ve ayarlayacağınızı gösterdik.

nginx