来源:https://blog.csdn.net/Powerful_Fyphp
什么是反向代理?linux
一、有两台服务器A和B属于同一内网段,可是A不通外网,B通外网,客户端C只有外网 二、C想经过B访问A,就须要在服务器B上作反向代理 三、客户端C经过外网与服务器B通讯,服务器B经过内网转发客户端C的请求与服务器A通讯。nginx
测试场景:web
服务器A 内网IP地址:192.168.234.128 部署了上一篇文章中的bbs网站 服务器B 内网IP:192.168.234.130 外网IP:192.168.111.128 客户端C 外网IP:192.168.111.101centos
需求:浏览器
客户端C能访问到服务器A的bbs网站服务器
1.测试客户端C与服务器B经过外网通讯:负载均衡
#客户端C与服务器B的能够经过外网通讯curl
2.新建并编辑服务器B的nginx虚拟主机配置文件:测试
[root@centos02 ~]# vi /etc/nginx/conf.d/nginx_proxy.conf
添加以下内容:
server { listen 80; server_name test.bbs.com; location / { proxy_pass http://192.168.234.128; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
server_name:服务器A的bbs网站域名(虚拟主机$host) proxy_pass http:服务器A的IP地址 proxy_set_header:代理来源IP和访问网站的客户端IP(如不配置,服务器A的nginx访问日志的来源IP将全是服务器B的IP地址)
3.从客户端C访问服务器A的bbs网站:
修改Windows系统C:\Windows\System32\drivers\etc\hosts文件:
#因为服务器A的bbs网站域名test.bbs.com为自定义域名,因此须要在客户端C修改hosts文件,使浏览器访问test.bbs.com网站是指向到服务器B的外网地址
客户端C打开浏览器访问test.bbs.com:
#已成功打开bbs网站页面,nginx反向代理配置完成
4.查看服务器A的nginx访问日志:
[root@linux nginx]# tail -1 access.log 192.168.234.130 - - [17/Oct/2019:16:43:29 +0800] "GET /favicon.ico HTTP/1.0" 200 5558 "http://test.bbs.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "192.168.111.1"
#来源IP192.168.234.130,真实IP:192.168.111.1
补充:
因为测试的客户端C和服务器B属于同一内网,因此真实IP显示的是192.168.111.0/24网段的网关,演示须要,将客户端C与服务器B的网段虚构成外网,因此两个不想通的内网段,也能够经过该方法配置nginx反向代理
什么是负载均衡?
当一个域名指向多台web服务器时,添加一台nginx负载均衡服务器,经过nginx负载均衡便可未来自于客户端的请求均衡的发送给每台web服务器,避免单台服务器负载太高而其他服务器较为空闲的不均衡状况出现
配置nginx负载均衡:
在nginx机器上新建配置文件:
[root@centos02 ~]# vi /etc/nginx/conf.d/test.conf
添加以下内容:
upstream test { ip_hash; server 192.168.0.10:80 weight=100; server 192.168.10.10:80; } server { listen 80; server_name www.test.com; location / { proxy_pass http://test; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
upstream:负载均衡配置 apelearn:自定义名,用于server{}中proxy_pass引用 ip_hash:将同一客户端的全部请求发送给同一服务器(如不发送给同一服务器,有可能出现客户端刚登录网站,点击其余子页面又提示登录) server:web服务器地址 weight:定义权重(范围0-100),负载均衡服务器优先将请求发送给权重大的web服务器 server_name:访问网站的域名 proxy_pass:引用upstream定义的名称
验证nginx配置并重载:
[root@centos02 ~]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@centos02 ~]# nginx -s reload
接下来修改客户端hosts文件将测试的域名www.test.com指向到测试的nginx负载均衡机器的IP便可访问www.test.com网站。
nginx配置SSL证书实现经过https协议访问网站:
SSL证书申请网站:
1.https://www.wosign.com/ 2.https://freessl.cn/(免费)
#经过浏览器生成后,须要在服务器建立证书文件
建立证书文件:
[root@linux ~]# mkdir /etc/nginx/ssl [root@linux ~]# cd !$ cd /etc/nginx/ssl [root@linux ssl]# touch ca [root@linux ssl]# touch test.crt [root@linux ssl]# touch test.key
#将证书申请网站提供的对应证书的内容添加到ca/ .crt/ .key文件中便可
编辑nginx配置文件:
[root@linux ~]# vi /etc/nginx/conf.d/bbs.conf
添加以下内容:
listen 443 ssl; server_name test.bbs.com; ssl on; ssl_certificate /etc/nginx/ssl/test.crt; #定义.crt文件路径 ssl_certificate_key /etc/nginx/ssl/test.key; #定义.key文件路径 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
验证配置并重载nginx:
[root@linux ~]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@linux ~]# nginx -s reload
#接下来访问网站地址栏便可显示HTTPS
curl验证方式:
curl -k -H "host:test.bbs.com" https://192.168.234.128/index.php
#host:域名,https:// webserver IP,输出结果为网站页面标签信息即表示成功