Hướng dẫn cấu hình nhận Real-IP từ người dùng truy cập vào trang web thông qua Nginx

30/12/2020

Trong bài trước, mình đã hướng dẫn các bạn cách cài đặt sử dụng Nginx làm reverse proxy cho WordPress có sử dụng ssl, nếu các bạn chưa cài có thể tham khảo tại đây. Tuy nhiên sau khi cài reverse proxy, lúc ta đọc log của http tại máy chủ WordPress, ta sẽ thấy rằng IP headers của nó hiển thị là IP của Nginx. Điều đó gây khó khăn cho việc thu thập log của chúng ta.

Ở bài viết này mình sẽ hướng dẫn các bạn cách cấu hình nhận Real-IP từ người dùng truy cập vào trang web. Để có thể có đầy đủ thông tin khi ta cấu hình thu thập log và có thể phục vụ cho những việc khác ví dụ như forensic ..

1. Kiểm tra lại file cấu hình site trên Nginx

Trước tiên ta kiểm tra lại file config site đã cấu hình ở bài trước để có thể chắc chắn rằng ta đã cấu hình đúng.

cat /etc/nginx/conf.d/wordpress.hungnv99.com.conf

Dưới đây là file của mình khi đã cấu hình site và bao gồm cấu hình ssl cho site.

server {     server_name wordpress.hungnv99.com;          location / {             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 https;             proxy_pass http://10.10.34.162;         }       listen 443 ssl; # managed by Certbot     ssl_certificate /etc/letsencrypt/live/wordpress.hungnv99.com/fullchain.pem; # managed by Certbot     ssl_certificate_key /etc/letsencrypt/live/wordpress.hungnv99.com/privkey.pem; # managed by Certbot     include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot     ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot  } server {     if ($host = wordpress.hungnv99.com) {         return 301 https://$host$request_uri;     } # managed by Certbot       server_name wordpress.hungnv99.com;     listen 80;     return 404; # managed by Certbot }

Tuy nhiên, chúng ta chỉ cần quan tâm đến những nội dung như sau, hoặc các bạn không cấu hình ssl có thể sử dụng nội dung như sau trong site config site.

server {     server_name wordpress.hungnv99.com;          location / {             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 https;             proxy_pass http://10.10.34.162;         } }

Tại đây ta chỉ quan tâm phần location chắc chắn đã được cấu hình đúng như trên.

2. Cấu hình log_config_module tại máy chủ WordPress

Trước khi thực hiện sửa file, ta cần copy lại file để tránh trường hợp xảy ra lỗi.

cp  /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bk 

Tại máy chủ wordpress, ta tiến hành vào file /etc/httpd/conf/httpd.conf và di chuyển đến dòng chứa thẻ <IfModule log_config_module> . Tiến hành xóa thẻ và thêm lại thẻ với nội dung như sau:

<IfModule log_config_module>     LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined     LogFormat "%{X-Forwarded-For}i %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" proxy     SetEnvIf X-Forwarded-For "^.*..*..*..*" forwarded     CustomLog "logs/access_log" combined env=!forwarded     CustomLog "logs/access_log" proxy env=forwarded      LogFormat "%h %l %u %t "%r" %>s %b" common      <IfModule logio_module>       # You need to enable mod_logio.c to use %I and %O       LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %I %O" combinedio     </IfModule> </IfModule>

Lưu lại nội dung đã thêm và khởi động lại dịch vụ http

systemctl restart httpd 

Tiếp theo, ta kiểm tra lại log trên máy chủ chạy wordpress xem đã thành công hay chưa như sau:

  • Sử dụng lệnh tailf theo dõi tệp theo thời gian thực để xem các dòng mới được ghi vào file /var/log/httpd/access_log.
  • Đứng trên 1 máy nào đó thực hiện hành động curl đến domain của trang web (máy thực hiện hành động curl của mình có IP public là 14.229.134.237).

Tại đây, sau khi bắt log tại máy chủ chạy wordpress ta thấy rằng IP header của log http đã hiển thị đúng với IP public của máy thực hiện curl đến trang web.

Như vậy mình đã hướng dẫn xong các bạn cách để nhận Real-IP từ người dùng khi truy cập web thông qua Nginx proxy. Hãy vào lại file log tại máy chủ wordpress để kiểm tra sự thay đổi nhé !

Chúc các bạn thành công !

ONET IDC thành lập vào năm 2012, là công ty chuyên nghiệp tại Việt Nam trong lĩnh vực cung cấp dịch vụ Hosting, VPS, máy chủ vật lý, dịch vụ Firewall Anti DDoS, SSL… Với 10 năm xây dựng và phát triển, ứng dụng nhiều công nghệ hiện đại, ONET IDC đã giúp hàng ngàn khách hàng tin tưởng lựa chọn, mang lại sự ổn định tuyệt đối cho website của khách hàng để thúc đẩy việc kinh doanh đạt được hiệu quả và thành công.
Bài viết liên quan

Meet the Self-Hosted Movement

Cloud adoption rates have been growing for many years now, with 73 percent of companies planning to move to a fully software-defined...
28/12/2020

Configuring PXE Network Boot Server on Ubuntu 18.04 LTS

PXE is a protocol used to boot operating systems over the network. You can use this method to install your favorite Linux...
29/12/2020

Connect to Office 365, Hotmail, MS Exchange with Hiri eMail Client

Hiri email client is an attractive mail app that integrates seamlessly not only with Microsoft Exchange servers, but also...
28/12/2020