Điểm:0

Nhận IP của người yêu cầu thực trong proxy ngược NGINX được đóng gói

lá cờ ro

Tôi có ngăn xếp Docker Swarm với nginx làm proxy ngược được thiết lập trên OVH vps. Tôi đã cố gắng sử dụng các lệnh cho phép/từ chối tại vị trí, nhưng nếu tôi đặt từ chối tất cả; nó sẽ không hoạt động ngay cả đối với ip được thêm bằng chỉ thị cho phép. Sau khi xem nhật ký truy cập, tôi phát hiện ra rằng tất cả các yêu cầu được cho là đến từ IP 10.0.0.2. Bây giờ tôi đã cố gắng lấy IP thực trước tiên để ít nhất được hiển thị trong nhật ký, nhưng không gặp may. Có nginx.conf của tôi:

sự kiện{}

http {

  bản đồ $http_upgrade $connection_upgrade {
    nâng cấp mặc định;
    ''      đóng lại;
  }
  thông tin error_log /dev/stdout;
  log_format json_combined thoát = json
    '{'
      '"thời gian":"$time_local",'
      '"httpRequest":{'
        '"requestMethod":"$request_method",'
        '"requestUrl":"$scheme://$host$request_uri",'
        '"requestSize":$request_length,'
        '"trạng thái":"$trạng thái",'
        '"responseSize":$bytes_sent,'
        '"userAgent":"$http_user_agent",'
        '"remoteIp":"$remote_addr",'
        '"serverIp":"$server_addr",'
        '"người giới thiệu":"$http_referer",'
        '"độ trễ":"${request_time}s",'
        '"giao thức":"$server_protocol"'
      '}'
    '}';

  trình phân giải 127.0.0.11 hợp lệ=30 giây;

  bao gồm /etc/nginx/mime.types;
  bao gồm /etc/nginx/sites-enabled/*.*;
}

proxy.conf:

set_real_ip_từ 10.0.0.0/8;
real_ip_header X-Forwarded-For;
real_ip_recursive bật;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Máy chủ $http_host;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header Nâng cấp $http_upgrade;
proxy_set_header Kết nối $connection_upgrade;
proxy_set_header X-NginX-Proxy true;
proxy_cache_bypass $http_upgrade;
proxy_http_version 1.1;
proxy_read_timeout 20d;
tắt proxy_buffering;
tắt proxy_request_buffering;
bật proxy_intercept_errors;
bật http2_push_preload;

và vị trí của tôi:

  vị trí /api/ {
     cho phép XXX.XX.XX.X;
     Phủ nhận tất cả;
     bao gồm /etc/nginx/proxy-options/proxy.conf;
     đặt dịch vụ ocelot $ ocelot;
     proxy_pass http://$ocelot$uri$is_args$args;
     tắt proxy_ssl_session_reuse;
     proxy_redirect tắt;
     client_max_body_size 5M;
  }

Tôi có thể làm gì để nginx ghi lại IP thực của người yêu cầu và nếu có thể, hãy sử dụng IP để so sánh với lệnh cho phép?

lá cờ us
Bạn đã kiểm tra xem máy chủ kết nối có đặt đúng tiêu đề `X-Forwarded-For` không?
Pepsko avatar
lá cờ ro
Thành thật mà nói tôi không biết làm thế nào tôi có thể kiểm tra điều đó
lá cờ us
Bạn cần phải tìm ra điều đó sau đó. Kiểm tra phần mềm kết nối với nginx này là gì và kiểm tra cấu hình của nó.
Pepsko avatar
lá cờ ro
Để chắc chắn - ý bạn là phần mềm gửi yêu cầu tới proxy chứ không phải máy chủ ẩn sau proxy, phải không?
Pepsko avatar
lá cờ ro
Với nghiên cứu sâu hơn, tôi phát hiện ra rằng vấn đề được kết nối với nginx chạy bên trong container trong docker swarm. Tôi đoán đó là bộ cân bằng tải docker swarm đặt IP 10.0.0.2. Vẫn chưa tìm ra cách khắc phục sự cố này, có vẻ như bộ cân bằng tải bầy đàn không đặt tiêu đề X-Forwarded-For.
lá cờ us
Địa chỉ IP không được "đặt". Khi kết nối TCP được mở, địa chỉ IP nguồn là địa chỉ mà thực thể kết nối có. Trong trường hợp này, bạn cần xem liệu Docker swarm có thể đặt tiêu đề hay không.
Pepsko avatar
lá cờ ro
Vâng, đó chỉ là một lối tắt tinh thần. Dù sao thì tôi cũng đã khắc phục được sự cố - đó là do mạng lớp phủ từ Docker Swarm, tôi cần chạy dịch vụ nginx ở chế độ máy chủ để giải quyết sự cố. Dù sao cũng cảm ơn vì thời gian của bạn
Điểm:0
lá cờ ro

Sự cố đã xảy ra do mạng "lớp phủ" bổ sung trong docker swarm; Tôi đã bỏ qua điều này bằng cách sử dụng mạng "máy chủ".

dịch vụ:
  nginx:
    ...
    cổng:
      - mục tiêu: 80
        đã xuất bản: 80
        giao thức: tcp
        chế độ: máy chủ
      - mục tiêu: 443
        đã xuất bản: 443
        giao thức: tcp
        chế độ: máy chủ

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.