odoo 通过nginx反向代理后获取真实IP地址

实操结果:

nginx 配置:


server {
	listen 80 ;
  	listen [::]:80 ;
    	server_name abc.com;

        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;

	location / {
		proxy_pass http://localhost:8088/;
                 proxy_set_header X-Forwarded-Host $http_host;
                 proxy_set_header X-Real-IP $remote_addr;
                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                 client_max_body_size 20m;

	}

}


那么在odoo中修改 odoo-9.0/openerp/service/wsgi_server.py 的 application 函数,新增此行即可!

def application(environ, start_response):
    if config['proxy_mode'] and 'HTTP_X_FORWARDED_HOST' in environ:
        # 增加此行
        werkzeug.serving.WSGIRequestHandler.address_string = lambda self: self.headers.get('x-real-ip', self.client_address[0])
        return werkzeug.contrib.fixers.ProxyFix(application_unproxied)(environ, start_response)
    else:
        return application_unproxied(environ, start_response)

另外外再odoo.conf 文件中要设置值
proxy_mode = True

原文地址:https://blog.csdn.net/J_z10/article/details/52119757

--

更新说明:2021-04-28:

今天使用odoo14版本试了下,不需要改动odoo 的源码,需要修改的事项:

  1. nginx 配置需要传入真实地址,也就上上方的配置即可。
  2. odoo 的配置文件需要添加 proxy_mode=True 默认为False
posted @ 2020-01-07 17:31  那时一个人  阅读(586)  评论(0)    收藏  举报