Android

Thiết lập proxy ngược nginx

NGINX as a high performance reverse proxy

NGINX as a high performance reverse proxy

Mục lục:

Anonim

Proxy ngược là dịch vụ nhận yêu cầu của máy khách, gửi yêu cầu đến một hoặc nhiều máy chủ được ủy quyền, tìm nạp phản hồi và gửi phản hồi của máy chủ cho máy khách.

Do hiệu suất và khả năng mở rộng của nó, NGINX thường được sử dụng làm proxy ngược cho các máy chủ HTTP và không phải HTTP. Một cấu hình proxy ngược điển hình là đặt Nginx trước các ứng dụng Node.js, Python hoặc Java.

Sử dụng Nginx làm proxy ngược cung cấp cho bạn một số lợi ích bổ sung:

  • Cân bằng tải - Nginx có thể thực hiện cân bằng tải để phân phối các yêu cầu của khách hàng trên các máy chủ ủy quyền, giúp cải thiện hiệu suất, khả năng mở rộng và độ tin cậy. Bộ nhớ đệm - Với Nginx là proxy ngược, bạn có thể lưu trữ các phiên bản được kết xuất sẵn của các trang để tăng tốc thời gian tải trang. Nó hoạt động bằng cách lưu trữ nội dung nhận được từ phản hồi của máy chủ proxy và sử dụng nội dung đó để trả lời khách hàng mà không phải liên hệ với máy chủ proxy cho cùng một nội dung mỗi lần. Chấm dứt SSL - Nginx có thể hoạt động như một điểm cuối SSL cho các kết nối với khách hàng. Nó sẽ xử lý và giải mã các kết nối SSL đến và mã hóa các phản hồi của máy chủ proxy. Nén - Nếu máy chủ proxy không gửi phản hồi nén, bạn có thể định cấu hình Nginx để nén các phản hồi trước khi gửi chúng cho khách hàng. Giảm thiểu các cuộc tấn công DDoS - Bạn có thể giới hạn các yêu cầu và số lượng kết nối đến trên mỗi địa chỉ IP duy nhất ở một giá trị điển hình cho người dùng thông thường. Nginx cũng cho phép bạn chặn hoặc hạn chế quyền truy cập dựa trên vị trí của máy khách và giá trị của các tiêu đề yêu cầu, chẳng hạn như Người dùng-Tác nhân và Tác giả Giới thiệu.

Bài viết này phác thảo các bước cần thiết để định cấu hình Nginx làm proxy ngược.

Điều kiện tiên quyết

Chúng tôi giả định rằng bạn đã cài đặt Nginx trên máy chủ Ubuntu, CentOS hoặc Debian.

Sử dụng Nginx làm Proxy ngược

Để định cấu hình Nginx làm proxy ngược cho máy chủ HTTP, hãy mở tệp cấu hình khối máy chủ của tên miền và chỉ định vị trí và máy chủ được ủy quyền bên trong nó:

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

URL máy chủ ủy quyền được đặt bằng chỉ thị proxy_pass và có thể sử dụng HTTP hoặc HTTPS làm giao thức, tên miền hoặc địa chỉ IP và một cổng tùy chọn và URI làm địa chỉ.

Cấu hình ở trên yêu cầu Nginx chuyển tất cả các yêu cầu đến vị trí /app đến máy chủ được ủy quyền tại địa chỉ http://127.0.0.1:8080 .

Trên các bản phân phối dựa trên Ubuntu và Debian, các tệp khối máy chủ được lưu trữ trong thư mục /etc/nginx/sites-available Available, trong khi trên CentOS trong thư mục /etc/nginx/conf.d .

Để minh họa rõ hơn cách hoạt động của chỉ thị location proxy_pass , hãy lấy ví dụ sau:

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

Nếu khách truy cập truy cập http://example.com/blog/my-post , Nginx sẽ ủy quyền yêu cầu này tới http://node1.com:8000/wordpress/my-post .

Khi địa chỉ của máy chủ proxy chứa URI, ( /wordpress/ ), URI yêu cầu được chuyển đến máy chủ proxy được thay thế bằng URI được chỉ định trong lệnh. Nếu địa chỉ của máy chủ proxy được chỉ định mà không có URI, URI yêu cầu đầy đủ được chuyển đến máy chủ proxy.

Tiêu đề yêu cầu

Khi Nginx ủy quyền một yêu cầu, nó sẽ tự động xác định hai trường tiêu đề trong một yêu cầu được ủy quyền từ máy khách, Host Connection và xóa các tiêu đề trống. Host được đặt thành biến $proxy_host Connection được đặt thành đóng.

Để điều chỉnh hoặc đặt các tiêu đề cho các kết nối được ủy quyền, hãy sử dụng lệnh proxy_set_header , theo sau là giá trị tiêu đề. Bạn có thể tìm thấy danh sách tất cả các Tiêu đề yêu cầu có sẵn và các giá trị được phép của chúng ở đây. Nếu bạn muốn ngăn tiêu đề được chuyển đến máy chủ proxy, hãy đặt tiêu đề thành một chuỗi trống "" .

Trong ví dụ sau, chúng tôi đang thay đổi giá trị của trường tiêu đề Host thành $host và xóa trường tiêu đề Accept-Encoding bằng cách đặt giá trị của nó thành một chuỗi trống.

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

Bất cứ khi nào bạn sửa đổi tệp cấu hình, bạn phải khởi động lại dịch vụ Nginx để các thay đổi có hiệu lực.

Định cấu hình Nginx làm Proxy ngược cho máy chủ không phải là HTTP

Để định cấu hình Nginx làm proxy ngược cho máy chủ không phải HTTP, bạn có thể sử dụng các lệnh sau:

  • fastcgi_pass - proxy ngược sang máy chủ FastCGI. uwsgi_pass - proxy ngược tới máy chủ uwsgi. scgi_pass - proxy ngược tới máy chủ SCGI. memcached_pass - proxy ngược tới máy chủ Memcached.

Một trong những ví dụ phổ biến nhất là sử dụng Nginx làm proxy ngược cho PHP-FPM:

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

Tùy chọn proxy ngược Nginx phổ biến

Phục vụ nội dung trên HTTPS ngày nay đã trở thành một tiêu chuẩn. Trong phần này, chúng tôi sẽ cung cấp cho bạn một ví dụ về cấu hình proxy ngược HTTPS Nginx bao gồm các tham số và tiêu đề proxy Nginx được đề xuất.

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 - Xác định phiên bản giao thức HTTP để ủy quyền, theo mặc định, nó được đặt thành 1.0. Đối với Websockets và kết nối cố định, bạn cần sử dụng phiên bản 1.1. proxy_cache_bypass $http_upgrade - Đặt điều kiện theo đó phản hồi sẽ không được lấy từ bộ đệm. Upgrade $http_upgrade Connection "upgrade" - Các trường tiêu đề này là bắt buộc nếu ứng dụng của bạn đang sử dụng Websockets. Host $host - Biến $host theo thứ tự ưu tiên sau chứa: tên máy chủ từ dòng yêu cầu hoặc tên máy chủ từ trường tiêu đề yêu cầu Host hoặc tên máy chủ khớp với yêu cầu. X-Real-IP $remote_addr - Chuyển tiếp địa chỉ IP từ xa của khách truy cập thực đến máy chủ proxy. X-Forwarded-For $proxy_add_x_forwarded_for - Một danh sách chứa địa chỉ IP của mọi máy chủ mà máy khách đã được ủy quyền thông qua. X-Forwarded-Proto $scheme - Khi được sử dụng bên trong khối máy chủ HTTPS, mỗi phản hồi HTTP từ máy chủ được ủy quyền được ghi lại thành X-Forwarded-Host $host - Xác định máy chủ ban đầu được khách hàng yêu cầu. X-Forwarded-Port $server_port - Xác định cổng ban đầu được khách hàng yêu cầu.

Phần kết luận

Bạn đã học cách sử dụng Nginx làm Proxy ngược. Chúng tôi cũng đã chỉ cho bạn cách chuyển các tham số bổ sung cho máy chủ cũng như sửa đổi và đặt các trường tiêu đề khác nhau trong các yêu cầu được ủy quyền.

nginx