1、nginx的反向代理
正向代理是指客户端访在问某个地址,如www.test.com,无法直接访问,是通过访问一个代理服务器返回访问内容,客户端明确知道要访问的地址是www.test.com;而反向代理是指当访问的内容存在于多个服务器上时,客户端的请求先发送到代理服务器,由代理服务器通过轮询、权重等方式选择一个服务器,代替客户端访问该服务器上的内容并返回结果给客户端。
2、环境
三台虚拟机:一台部署nginx,另外两台部署tomcat
3、安装配置nginx
yum安装编译工具及库文件:
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
安装PCRE,PCRE 作用是让 Nginx 支持 Rewrite 功能
wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
tar -zxvf pcre-8.35.tar.gz
cd pcre-8.35
./configure
make && make install
查看pcre版本:pcre-config --version 显示8.35
安装nginx
wget http://nginx.org/download/nginx-1.6.2.tar.gz
tar -zxvf nginx-1.6.2.tar.gz
cd nginx-1.6.2
./configure
make && make install
whereis nginx查看nginx所在目录:/usr/local/nginx
/usr/local/nginx/sbin/nginx 启动nginx
/usr/local/nginx/sbin/nginx -s stop, quit, reopen, reload 关闭、退出、重新打开、重启
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
...
}
看到nginx是80端口,浏览器访问,发现访问不了,原因是防火墙80端口未开启
firewall-cmd --query-port=80/tcp 查看端口是否开放 (centos7)
firewall-cmd --zone=public --add-port=80/tcp --permanent 开启端口 (centos7)
重启防火墙 systemctl restart firewalld.service
重新访问,成功!
4、负载均衡
为了方便测试,在两台机器的webapp/examples下新建同名的test.jsp
启动另外两台机器上的tomcat,ip和端口分别为192.168.1.193:8080和192.168.1.194:8080
配置nginx
http{
...
upstream tomcat_app{
server 192.168.1.193:8080 weight=2;
server 192.168.1.194:8080 weight=1;
}
server {
listen 80;
server_name localhost 192.168.1.152;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.html;
proxy_pass http://tomcat_app;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
...
}
}
使用weight轮询的方式配置,当访问192.168.1.152:80时会将请求转发到192.168.1.193和192.168.1.194,并且连续的访问结果是访问193两次,访问194一次,再访问193两次,访问194一次,重复。
注意:
proxy_pass http://后的内容跟定义的upstream相同;
如果不配置proxy_set_header Host $host等,浏览器访问时会报错400
在浏览器连续访问http://192.168.1.152:80/examples/test.jsp
done!
参考:
https://www.runoob.com/linux/nginx-install-setup.html