Nginx代理时在gunicorn的日志中记录真实访问IP

3 篇文章 0 订阅
2 篇文章 0 订阅

一、问题概述

在通过Nginx负载均衡的情况下,gunicorn的log中记录的访问访问日志并不是用户的IP,而是Nginx主机的IP。

二、解决方法

1. Nginx配置:

其中proxy_set_header X-Real-IP $remote_addr;在请求头中加入了真实的用户IP信息,并一起发送给了后端的gunicorn 服务。

	location /api {
	    proxy_pass http://zy_ems;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	}
2. gunicorn配置

在gunicorn的启动配置文件中添加下面一段配置:

access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s" "%({X-Real-IP}i)s"'

前面的内容为其他的信息,最后的"%({X-Real-IP}i)s"是在日志中加入用户真实的访问IP。
具体关于日志格式的定制可参考:
1. gunicorn官网(logging)
2.Gunicorn doesn’t log real ip from nginx
官方文档

三、实现效果

上面两条日志为访问配置前,日志的内容只有nginx的ip,最后一条日志为配置后,除了有nginx的ip之外,追加了用户的ip信息。
在这里插入图片描述

  
Email : Beyonderwei@Gmail.com
Website : http://beyonderwei.com
  
WeChat:

Django是一个优秀的Web框架,可以帮助开发者快速构建Web应用程序。但是,当我们需要将Django应用程序部署到生产环境,我们需要考虑很多方面,例如性能、安全、可靠性等。本文将介绍如何使用GunicornNginx将Django应用程序部署到生产环境。 ## 准备工作 在开始之前,我们需要在服务器上安装一些必要的软件包和库。 ### 安装Python和pip 首先,我们需要在服务器上安装Python和pip。如果您已经安装了它们,请跳过此步骤。 ```shell # Ubuntu sudo apt-get update sudo apt-get install python3 python3-pip # CentOS sudo yum update sudo yum install python3 python3-pip ``` ### 创建虚拟环境 为了避免与其他Python应用程序的依赖项冲突,我们建议在服务器上使用虚拟环境。在此过程,我们将使用venv创建一个虚拟环境。 ```shell python3 -m venv myenv source myenv/bin/activate ``` ### 安装Django和Gunicorn 一旦我们进入虚拟环境,我们可以使用pip安装Django和Gunicorn。 ```shell pip install django gunicorn ``` ## 配置Gunicorn Gunicorn是一个Python WSGI HTTP服务器,可以处理Django应用程序的并发请求。下面是如何配置Gunicorn。 ### 创建Gunicorn配置文件 我们可以为Gunicorn创建一个配置文件。在此过程,我们将创建一个名为`gunicorn_config.py`的文件。 ```python bind = "127.0.0.1:8000" workers = 3 user = "myuser" ``` 在这个配置文件,我们定义了以下几个参数: - `bind`:指定Gunicorn绑定的IP地址和端口号。 - `workers`:指定Gunicorn启动的工作进程数。 - `user`:指定Gunicorn运行的用户。 请注意,我们将Gunicorn绑定到`127.0.0.1`地址,这意味着它只能在本地访问。如果您想让Gunicorn在公共IP地址上运行,请使用`0.0.0.0`。 ### 启动Gunicorn 一旦我们创建了配置文件,我们可以使用以下命令启动Gunicorn。 ```shell gunicorn myproject.wsgi:application -c gunicorn_config.py ``` 在这个命令,我们指定了Django的WSGI入口点`myproject.wsgi:application`,以及Gunicorn配置文件`gunicorn_config.py`。 ## 配置Nginx 现在我们已经成功启动了Gunicorn,我们需要将Nginx配置为反向代理,以便客户端可以通过Nginx访问我们的应用程序。 ### 安装Nginx 如果您还没有安装Nginx,请按照以下步骤进行安装。 ```shell # Ubuntu sudo apt-get update sudo apt-get install nginx # CentOS sudo yum update sudo yum install nginx ``` ### 创建Nginx配置文件 我们需要为Nginx创建一个配置文件。在此过程,我们将创建一个名为`myproject.conf`的文件。 ```nginx server { listen 80; server_name example.com; access_log /var/log/nginx/access.log; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` 在这个配置文件,我们定义了以下几个参数: - `listen`:指定Nginx监听的端口号。 - `server_name`:指定Nginx的域名。 - `access_log`:指定Nginx访问日志路径。 - `location`:指定Nginx的URL匹配规则和反向代理设置。 请注意,我们将Nginx绑定到`example.com`域名,并将所有请求转发到Gunicorn运行的`127.0.0.1:8000`地址。 ### 重启Nginx 一旦我们创建了配置文件,我们可以使用以下命令重新启动Nginx。 ```shell sudo service nginx restart ``` ## 结论 现在我们已经成功地将Django应用程序部署到生产环境。我们使用Gunicorn处理并发请求,并使用Nginx作为反向代理,以提高性能和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值