Làm cách nào để sử dụng Nginx làm máy chủ proxy HTTP / HTTPS? [đóng cửa]


Câu trả lời:


13

Sau một số thử nghiệm, tôi thấy làm việc cho tôi cấu hình sau.

server {
  server_name ~^(www\.)?(?<domain>.+)$;
  access_log /var/log/nginx/proxy.access.log main;
  error_log /var/log/nginx/proxy.error.log crit;
  listen 10.255.1.13:8080;
  resolver 8.8.8.8;
  location / {
    proxy_pass http://$domain;
    proxy_redirect off;
    proxy_set_header Host $host;
    # Optional headers 
    # proxy_set_header X-Real-IP $remote_addr;
    # proxy_set_header X-Forwarded-For
    # $proxy_add_x_forwarded_for;
  }
}

Cấu hình này chỉ hoạt động cho HTTP, không phải cho HTTPS.


4
Làm tốt lắm! Vài gợi ý. 1 : listen ... default_server. 2: server_name ""hoặc server_name _. 2 : proxy_pass $scheme://$http_host. Những hạn chế: chỉ đánh thuế ngược dòng với cổng 80; không xử lý chuyển hướng chính nó.
Alexander Azarov

$ lược đồ chỉ hữu ích nếu vhost cũng nghe trên https - nhưng sau đó bạn gặp phải rủi ro trung bình và lỗi chứng chỉ https phải đối mặt với ... cả hai đều là vấn đề bảo mật lớn cần xem xét
anthonysomerset

7

Tôi nghĩ rằng câu trả lời ngắn gọn là không, nó không được viết để chuyển tiếp ủy quyền

CẬP NHẬT

để làm rõ tuyên bố của tôi ở trên:

NGINX không bao giờ được viết với proxy chuyển tiếp trong tâm trí - trong khi bằng cách nào đó có thể jerry điều chỉnh cấu hình để thực hiện những gì bạn muốn, bạn sẽ phải hiểu những hạn chế sau:

  • Hỗ trợ bộ nhớ cache gần như không tồn tại (một trong những lý do chính để sử dụng proxy)
  • Không thể sử dụng cho bất kỳ thứ gì ngoài lưu lượng cổng 80 (nghĩa là không đăng nhập vào các hộp cpanel thông qua nó)
  • Không hỗ trợ lưu lượng dựa trên SSL
  • Không hỗ trợ cho các tiêu đề proxy tiêu chuẩn và các tiêu đề bộ đệm http (tôi hiểu là những điều này chỉ được thông qua
  • Không hỗ trợ cho các giao thức khác hỗ trợ máy chủ proxy - ví dụ: VPN, v.v.

Những cân nhắc khác có thể chưa biết vào lúc này:

  • Có thể DoS proxy của bạn vì không có khả năng thực sự để kiểm soát / xác thực truy cập chi tiết (nginx có hỗ trợ cho các phương pháp kiểm soát truy cập khác nhau nhưng không rõ cách thức này có thể hoạt động trong bối cảnh proxy chuyển tiếp)
  • Rủi ro bảo mật có thể xảy ra với máy mà nginx được cài đặt vì có thể có các lỗ hổng bảo mật có thể không được xem xét do sử dụng theo cách mà nó không được thiết kế để chạy


có lẽ câu trả lời của tôi đã rõ ràng hơn, nó không được thiết kế để chuyển tiếp proxy - những nỗ lực vá khỉ sẽ không cung cấp hỗ trợ proxy đầy đủ như yêu cầu ủy quyền tới các cổng (cổng 80) không chuẩn
anthonysomerset

3

Nếu bạn muốn sử dụng proxy HTTP / HTTPS, bạn nên sử dụng Squid. Nó được viết để làm chính xác điều đó. Nginx được viết để hoạt động như một proxy ngược và cân bằng tải, nhưng không phải là một proxy chuyển tiếp.


Tôi biết về mực / oops / tinyproxy / vv. Tôi chỉ hỏi câu hỏi này vì lợi ích học tập
vlad
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.