기계적 인조 인간

nginx 리버스 프록시 설정

애플, 802.11n 무선 네트워크 백업 박스「타임캡슐」선봬

애플, 802.11n 무선 네트워크 백업 박스「타임캡슐」선봬

차례:

Anonim

리버스 프록시는 클라이언트 요청을 받고 하나 이상의 프록시 서버로 요청을 보내고 응답을 가져오고 서버의 응답을 클라이언트에 전달하는 서비스입니다.

성능과 확장 성으로 인해 NGINX는 종종 HTTP 및 비 HTTP 서버의 리버스 프록시로 사용됩니다. 일반적인 리버스 프록시 구성은 Nginx를 Node.js, Python 또는 Java 애플리케이션 앞에 두는 것입니다.

Nginx를 리버스 프록시로 사용하면 몇 가지 추가 이점이 있습니다.

  • 로드 밸런싱 -Nginx는로드 밸런싱을 수행하여 프록시 서버에 클라이언트 요청을 분산시켜 성능, 확장 성 및 안정성을 향상시킵니다. 캐싱 -Nginx를 리버스 프록시로 사용하면 사전 렌더링 된 페이지 버전을 캐시하여 페이지로드 시간을 단축 할 수 있습니다. 프록시 서버의 응답에서 수신 한 컨텐츠를 캐싱하고 매번 동일한 컨텐츠에 대해 프록시 서버에 접속하지 않고도 클라이언트에 응답하는 데 사용합니다. SSL 종료 -Nginx는 클라이언트와의 연결을위한 SSL 엔드 포인트 역할을 할 수 있습니다. 들어오는 SSL 연결을 처리 및 해독하고 프록시 서버의 응답을 암호화합니다. 압축 -프록시 서버가 압축 된 응답을 보내지 않으면 응답을 클라이언트로 보내기 전에 압축하도록 Nginx를 구성 할 수 있습니다. DDoS 공격 완화 -단일 IP 주소 당 들어오는 요청 및 연결 수를 일반 사용자에게 일반적인 값으로 제한 할 수 있습니다. Nginx를 사용하면 클라이언트 위치와 "User-Agent"및 "Referer"와 같은 요청 헤더 값을 기반으로 액세스를 차단하거나 제한 할 수 있습니다.

이 기사에서는 Nginx를 리버스 프록시로 구성하는 데 필요한 단계를 설명합니다.

전제 조건

우분투, CentOS 또는 데비안 서버에 Nginx가 설치되어 있다고 가정합니다.

Nginx를 리버스 프록시로 사용

Nginx를 HTTP 서버에 대한 리버스 프록시로 구성하려면 도메인의 서버 블록 구성 파일을 열고 그 안에 위치 및 프록시 서버를 지정하십시오.

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

프록시 서버 URL은 proxy_pass 지시문을 사용하여 설정되며 프로토콜, 도메인 이름 또는 IP 주소로 HTTP 또는 HTTPS 를 사용하고 주소로 선택적 포트 및 URI를 사용할 수 있습니다.

위의 구성은 Nginx에게 모든 요청을 /app 위치의 프록시 서버 ( http://127.0.0.1:8080 로 전달하도록 지시합니다.

우분투 및 데비안 기반 배포판에서 서버 블록 파일은 /etc/nginx/sites-available 디렉토리에, CentOS는 /etc/nginx/conf.d 디렉토리에 저장됩니다.

location proxy_pass 지시문의 작동 방식을보다 잘 설명하기 위해 다음 예제를 살펴 보겠습니다.

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

방문자가 http://example.com/blog/my-post 에 액세스하면 Nginx는이 요청을 http://node1.com:8000/wordpress/my-post 프록시합니다.

프록시 서버의 주소에 URI ( /wordpress/ )가 포함 된 경우 프록시 서버에 전달 된 요청 URI는 지시문에 지정된 URI로 대체됩니다. 프록시 서버의 주소가 URI없이 지정되면 전체 요청 URI가 프록시 서버로 전달됩니다.

요청 헤더 전달

Nginx는 요청을 프록시 할 때 클라이언트의 프록시 요청 인 Host Connection 에서 두 개의 헤더 필드를 자동으로 정의하고 빈 헤더를 제거합니다. Host $proxy_host 변수로 설정되고 Connection 은 닫히도록 설정됩니다.

프록시 연결에 대한 헤더를 조정하거나 설정하려면 proxy_set_header 지시문과 헤더 값을 사용하십시오. 사용 가능한 모든 요청 헤더 및 허용되는 값 목록을 여기에서 찾을 수 있습니다. 헤더가 프록시 서버로 전달되지 않게하려면 빈 문자열 "" 설정하십시오.

다음 예에서는 Host 헤더 필드의 값을 $host 로 변경하고 값을 빈 문자열로 설정하여 Accept-Encoding 헤더 필드를 제거합니다.

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

구성 파일을 수정할 때마다 변경 사항을 적용하려면 Nginx 서비스를 다시 시작해야합니다.

비 HTTP 프록시 서버에 대한 리버스 프록시로 Nginx 구성

비 HTTP 프록시 서버에 대한 리버스 프록시로 Nginx를 구성하려면 다음 지시문을 사용할 수 있습니다.

  • fastcgi_pass -FastCGI 서버에 대한 프록시 프록시. uwsgi_pass 프록시를 uwsgi 서버로 리버스합니다. scgi_pass -SCGI 서버에 대한 프록시 프록시. memcached_pass 프록시를 Memcached 서버로 리버스합니다.

가장 일반적인 예 중 하나는 Nginx를 PHP-FPM의 리버스 프록시로 사용하는 것입니다.

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

일반적인 Nginx 리버스 프록시 옵션

오늘날 HTTPS를 통한 컨텐츠 제공이 표준이되었습니다. 이 섹션에서는 권장 Nginx 프록시 매개 변수 및 헤더를 포함하여 HTTPS Nginx 리버스 프록시 구성의 예를 제공합니다.

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 프록시 용 HTTP 프로토콜 버전을 정의하며 기본적으로 1.0으로 설정됩니다. 웹 소켓 및 연결 유지 연결의 경우 버전 1.1을 사용해야합니다. proxy_cache_bypass $http_upgrade 캐시에서 응답을받지 않는 조건을 설정합니다. Upgrade $http_upgrade Connection "upgrade" – 응용 프로그램이 웹 소켓을 사용하는 경우이 헤더 필드가 필요합니다. Host $host 다음 우선 순위의 $host 변수에는 요청 라인의 Host 이름 또는 Host 요청 헤더 필드의 Host 이름 또는 요청과 일치하는 서버 이름이 포함됩니다. X-Real-IP $remote_addr 실제 방문자 원격 IP 주소를 프록시 서버로 전달합니다. X-Forwarded-For $proxy_add_x_forwarded_for 클라이언트가 프록시 된 모든 서버의 IP 주소를 포함하는 목록. X-Forwarded-Proto $scheme -HTTPS 서버 블록 내에서 사용될 때 프록시 서버의 각 HTTP 응답은 HTTPS로 다시 작성됩니다. X-Forwarded-Host $host 클라이언트가 요청한 원래 호스트를 정의합니다. X-Forwarded-Port $server_port 클라이언트가 요청한 원래 포트를 정의합니다.

결론

Nginx를 리버스 프록시로 사용하는 방법을 배웠습니다. 또한 추가 매개 변수를 서버에 전달하고 프록시 요청에서 다른 헤더 필드를 수정하고 설정하는 방법도 보여주었습니다.

니 진스