Setting up a web application in the cloud is always fun and exciting. Recently, I launched Site Toolbox tool which is hosted in AWS behind Cloud Flare.
I am using AWS application load balancer and Nginx as a web server. After making live, I went to see the access.log and noticed all requests were marked as coming from internal (load balancer) IP.
This is something not good if you want to analyze your web server logs for visitor location. I realized that I am missing or need to do some configuration changes to restore the client IP.
Are you in the same situation as I was?
Well, here is how you can get the client IP in your Nginx access logs.
Getting Visitor IP from AWS or Google Cloud LB
- Login to your Nginx web server
- Go to path where it’s installed (default location /etc/nginx)
- Take a backup of nginx.conf file
- Add the following under http block
real_ip_header X-Forwarded-For; set_real_ip_from 0.0.0.0/0;
- Restart the Nginx and you should see the visitor’s IP in your access.log file
If you are behind Cloud Flare then you will see Cloud Flare IP instead of client’s IP so you got to do the below as well.
Getting Client IP from Cloud Flare
Cloud Flare is great CDN and Security provider and I absolutely love it. If you are using Cloud Flare like me and would like to restore the visitor IP in web server log then here is how you can do it.
Assuming you are logged into Nginx server
Take a backup of your site configuration file (usually here – /etc/nginx/sites-available/yourdomain)
Add the following at the beginning of the file
set_real_ip_from 188.8.131.52/22; set_real_ip_from 184.108.40.206/22; set_real_ip_from 220.127.116.11/22; set_real_ip_from 18.104.22.168/12; set_real_ip_from 22.214.171.124/18; set_real_ip_from 126.96.36.199/22; set_real_ip_from 188.8.131.52/18; set_real_ip_from 184.108.40.206/15; set_real_ip_from 220.127.116.11/13; set_real_ip_from 18.104.22.168/20; set_real_ip_from 22.214.171.124/20; set_real_ip_from 126.96.36.199/20; set_real_ip_from 188.8.131.52/22; set_real_ip_from 184.108.40.206/17; set_real_ip_from 220.127.116.11/21; set_real_ip_from 2400:cb00::/32; set_real_ip_from 2606:4700::/32; set_real_ip_from 2803:f800::/32; set_real_ip_from 2405:b500::/32; set_real_ip_from 2405:8100::/32; set_real_ip_from 2c0f:f248::/32; set_real_ip_from 2a06:98c0::/29; real_ip_header CF-Connecting-IP;
Restart Nginx and you should see the client IP now. This has helped me and I hope you too. Let me know how it goes.