当前所在位置: 首页 > 域名交易

linux怎么装nginx?docker容器怎么绑定域名?nginx反向代理Nginx-反向代理后应用程序获取客户端真实IP

2021-10-11 本站作者 【 字体:

一、安装Docker

Nginx反向代理后,后端Java应用通过request.getRemoteAddr()取到的IP是Nginx的IP地址,并非客户端真实IP,通过request.getRequestURL()获取的域名、协议、端口都是Nginx访问Web应用时的域名、协议、端口,而非客户端浏览器地址栏上的真实域名、协议、端口。

Nginx的反向代理实际上是客户端和真实的应用服务器之间的一个桥梁,客户端(一般是浏览器)访问Nginx服务器,Nginx再去访问Web应用服务器。对于Web应用来说,这次HTTP请求的客户端是Nginx而非真实的客户端浏览器,如果不做特殊处理的话,Web应用会把Nginx当作请求的客户端,获取到的客户端信息就是Nginx的一些信息。

解决这个问题要从两个方面来解决:

已经安装docker省略此步骤。不会请看我另一篇安装docker的文章链接

由于Nginx是代理服务器,所有客户端请求都从Nginx转发到Tomcat,如果Nginx不把客户端真实IP、域名、协议、端口告诉Tomcat,那么Tomcat应用是永远不会知道这些信息的,所以需要Nginx配置一些HTTP Header来将这些信息告诉被代理的Tomcat;Tomcat这一端,不能再傻乎乎的获取直接和它连接的客户端(也就是Nginx)的信息,而是要从Nginx传递过来的HTTP Header中获取客户端信息。

二、安装Nginx

1.安装nginx镜像 命令 docker pull nginx

2.创建nginx容器并启动

命令

nginx.conf配置

项目文件示例

docker run -p 80:80 --privileged=true --restart=always --name=nginx -v /home/nginx/conf.d:/etc/nginx/conf.d -d nginx

#设置服务器监听端口,即外网访问端口 proxy_set_header Host $host:8012; proxy_set_header Accept-Encoding ''; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

在代理的每个location处添加以下配置:

proxy_set_header Host $http_host; 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 $scheme;

以上配置是在Nginx反向代理的时候,添加一些请求Header。

Host包含客户端真实的域名和端口号;X-Forwarded-Proto表示客户端真实的协议(http还是https);X-Real-IP表示客户端真实的IP;X-Forwarded-For这个Header和X-Real-IP类似,但它在多层代理时会包含真实客户端及中间每个代理服务器的IP。

配置到这一步后,还不能彻底解决问题。

Tomcat配置

解决方案大多是通过获取HTTP请求头request.getHeader("X-Forwarded-For")或request.getHeader("X-Real-IP")来实现,也就是上面在Nginx上配置的Header,这种方案获取的结果的确是正确的,但觉得并不优雅。因为既然Servlet API提供了request.getRemoteAddr()方法获取客户端IP,那么无论有没有用反向代理对于代码编写者来说应该是透明的。

说明: -v /home/nginx/conf.d:/etc/nginx/conf.d 映射容器nginx配置,同步的。

下面介绍一种更加优雅的方式。

3.在文件夹/home/nginx/conf.d 新建nginx反向代理配置文件(一个域名对应建一个)

使用Tomcat作为应用服务器,可以通过配置Tomcat的server.xml文件,在Host元素内最后加入即可

定位 命令 cd /home/nginx/conf.d

<Engine jvmRoute="05" name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"></Host> <Valve className="org.apache.catalina.valves.RemoteIpValve" /> </Engine>

新建配置文件 命令 vi www.aaa.com.conf 编辑

server { listen 80; server_name www.aaa.top; #域名 location / { proxy_pass http://192.168.233.128:5000; #转发地址(项目容器宿主ip及端口) } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } linux怎么装nginx?docker容器怎么绑定域名?nginx反向代理

按Esc :wq保存

重启nginx 命令 docker restart nginx

这样就可以访问啦。

linux怎么装nginx?docker容器怎么绑定域名?nginx反向代理linux怎么装nginx?docker容器怎么绑定域名?nginx反向代理linux怎么装nginx?docker容器怎么绑定域名?nginx反向代理

———来自原创 风吹蛋蛋飘~

———来自本作者csdn号 搜索: 风吹蛋蛋飘~

阅读全文
id_1广告位-300*300
相关推荐

简述域名解析的过程域名注册流程是什么?

简述域名解析的过程域名注册流程是什么?
你好,域名注册流程有以下步骤:1、首先在百度中搜索“域名注册”,可以看到很多网站...

请问如何申请域名?求域名转让的流程?

请问如何申请域名?求域名转让的流程?
感谢邀请,这也是三分最在行的事情之一。目前手头也有部分域名在手,当做投资了,目前...

[电脑技巧] 什么是IP地址、网关、DNS、子网掩码、MAC地址?godaddy平台域名转移好不好?转入流程是怎样的?

[电脑技巧] 什么是IP地址、网关、DNS、子网掩码、MAC地址?godaddy平台域名转移好不好?转入流程是怎样的?
我觉得狗爹域名转移还是蛮好的,比国内的注册商有很多优势。比如国内多数的注册商对于...

从计算机域名到IP地址翻译的过程称为什么。域名是什么意思啊?

从计算机域名到IP地址翻译的过程称为什么。域名是什么意思啊?
域名,简称域名、网域,是由一串用点分隔的名字组成的Internet上某一台计算机...

目前比较快的DNS,有几个?域名地址、IP地址、物理地址的作用和相互之间的关系是什么?

目前比较快的DNS,有几个?域名地址、IP地址、物理地址的作用和相互之间的关系是什么?
通过一些解释帮你进行认识,希望能帮到你 域名地址Domain name addr...

域名怎么表示?一级域名和二级域名的区别是什么?作用怎样?

域名怎么表示?一级域名和二级域名的区别是什么?作用怎样?
域名地址也是HTTP是超文本转移协议,是客户端浏览器或其他程序与Web服务器之间...

无线中DNS改为114.114.114.114真的能提高网速吗?如何提高网速?为什么域名要分中文的和英文的?

无线中DNS改为114.114.114.114真的能提高网速吗?如何提高网速?为什么域名要分中文的和英文的?
DNS改为114.114.114.114不一定能提高网速,把DNS设为“114....

域名注册商转移步骤是怎样的?如何域名注册转移?路由器虚拟服务器dmz主机图文教程,设置转发局域网ip端口映射

域名注册商转移步骤是怎样的?如何域名注册转移?路由器虚拟服务器dmz主机图文教程,设置转发局域网ip端口映射
域名注册商转移步骤是怎样的?如何域名注册转移?很多小伙伴们可能在多个域名注册平台...

域名解析、IP指向、URL转发.所指的是什么意思?如何作域名URL转发?

域名解析、IP指向、URL转发.所指的是什么意思?如何作域名URL转发?
我们知道域名是为了方便记忆而专门建立的一套地址转换系统,要访问一台互联网上的服务...

国内有哪些比较快速稳定的缩短网址的服务呢?thinkphp怎么缩短网址

国内有哪些比较快速稳定的缩短网址的服务呢?thinkphp怎么缩短网址
推荐使用 缩吧短址服务,主页地址: http://s8.hk你看下这里就会明白了...