##前言 上一篇解释了Nginx的反向代理模块的用法,本篇主要以实践为主。本次演示并为实现Nginx高可用。仅以演示Nginx反向代理为准。
##实验环境: 三台服务器一台服务器作为前端反向代理,剩下两台服务器为tomcat服务器。
- 角色 服务器IP地址 域名 OS版本
- 前端Nginx反向代理 192.168.1.141 CentOS7.2
- 后端tomcat服务器 192.168.1.142 www.a.com CentOS7.2
- CentOS7.2 192.168.1.143 www.b.net CentOS7.2
##拓扑图
##1、配置Nginx官方YUM源
前端Nginx服务器配置,本次演示使用yum去安装,如果需要源码编译安装请参照之前发的Nginx安装。
[root@Bj-1-141 ~]# cd /etc/yum.repos.d/
[root@Bj-1-141 yum.repos.d]# vim nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
##2、安装nginx-1.8.1版本
前端nginx服务器安装
[root@Bj-1-141 ~]# yum -y install nginx-1.8.1
##3、配置nginx反向代理
###(1) 修改主配置文件
[root@Bj-1-141 ~]# cd /etc/nginx/
[root@Bj-1-141 nginx]# vim nginx.conf
user nginx;
worker_processes 4;
worker_rlimit_nofile 65535;
worker_cpu_affinity 0001 0010 0100 1000;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 10240;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nodelay on;
#tcp_nopush on;
keepalive_timeout 30;
gzip on;
gzip_comp_level 6;
gzip_http_version 1.0;
gzip_disable msie6;
gzip_min_length 1k;
gzip_types text/plain text/css text/xml application/x-javascript application/xml application/json;
# 定义a.com域名的缓存目录,缓存zone为acache
proxy_cache_path /var/cache/nginx/a.com levels=2:1 keys_zone=acache:10m max_size=1g;
# 定义b.net域名的缓存目录,缓存zone为bcache
proxy_cache_path /var/cache/nginx/b.net levels=2:1 keys_zone=bcache:10m max_size=1g;
include /etc/nginx/conf.d/*.conf;
}
###(2) 添加虚拟主机配置
[root@Bj-1-141 nginx]# cd conf.d/
[root@Bj-1-141 conf.d]# vim www.a.com.conf
upstream www_a {
server 192.168.1.142:8080 weight=1 max_fails=3;
}
server {
listen 80;
server_name www.a.com;
index index.html index.htm index.jsp;
access_log /data/logs/www.a.com/access.log main;
location / {
proxy_pass http://www_a;
proxy_cache acache;
proxy_cache_key $request_uri;
proxy_cache_valid 200 301 302 1m;
proxy_cache_valid 404 1m;
proxy_set_header Host $host;
proxy_set_header X-Forward-For $remote_addr;
proxy_read_timeout 60s;
add_header X-Cache $upstream_cache_status;
}
}
[root@Bj-1-141 conf.d]# vim www.b.net.conf
upstream www_b {
server 192.168.1.143:8080 weight=1 max_fails=3;
}
server {
listen 80;
server_name www.b.net;
index index.html index.htm index.jsp;
access_log /data/logs/www.b.net/access.log main;
location / {
proxy_pass http://www_b;
proxy_cache bcache;
proxy_cache_key $request_uri;
proxy_cache_valid 200 301 302 1m;
proxy_cache_valid 404 1m;
proxy_set_header Host $host;
proxy_set_header X-Forward-For $remote_addr;
proxy_read_timeout 60s;
add_header X-Cache $upstream_cache_status;
}
}
[root@Bj-1-141 conf.d]# mkdir -pv /data/logs/{www.a.com,www.b.net}
mkdir: created directory ‘/data’
mkdir: created directory ‘/data/logs’
mkdir: created directory ‘/data/logs/www.a.com’
mkdir: created directory ‘/data/logs/www.b.net’
You have new mail in /var/spool/mail/root
[root@Bj-1-141 conf.d]# mkdir -pv /var/cache/nginx/{a.com,b.net}
mkdir: created directory ‘/var/cache/nginx/a.com’
mkdir: created directory ‘/var/cache/nginx/b.net’
[root@Bj-1-141 conf.d]# chown -R nginx.nginx /var/cache/nginx/
# 检查配置文件语法
[root@Bj-1-141 nginx]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
##4、配置后端Tomcat服务器 两台后端服务器同时安装配置tomcat服务。
# 安装配置jdk
[root@bj-1-142 ~]# tar xf jdk-8u121-linux-x64.tar.gz -C /usr/local/
[root@bj-1-142 ~]# ln -sv /usr/local/jdk1.8.0_121/ /usr/local/jdk
"/usr/local/jdk" -> "/usr/local/jdk1.8.0_121/"
[root@bj-1-142 ~]# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=/usr/local/jdk/jre/
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 安装配置tomcat
[root@bj-1-142 ~]# tar xf apache-tomcat-8.0.41.tar.gz -C /usr/local/
[root@bj-1-142 ~]# cd /usr/local/
[root@bj-1-142 local]# mv apache-tomcat-8.0.41/ apache-tomcat-8080
[root@BJ-1-143 local]# cd apache-tomcat-8080/webapps/
[root@BJ-1-143 webapps]# rm -fr ./*
[root@BJ-1-143 webapps]# mkdir ROOT
[root@BJ-1-143 webapps]# cd ROOT/
# 此处使用的war包为京峰教育开源贡献的一个war包,非常感谢京峰教育的提供。
[root@BJ-1-143 ROOT]# unzip edu.war
# 启动tomcat服务
[root@BJ-1-143 ROOT]# cd ../../
[root@BJ-1-143 apache-tomcat-8080]# ./bin/catalina.sh start
注意:为了区分两个域名请求的结果不一样,故意让两个站点其中一个图片不一样。
直接访问192.168.1.142:8080查看结果:
##5、启动nginx服务
[root@Bj-1-141 ~]# systemctl start nginx.service
[root@Bj-1-141 ~]# ss -tnl|grep 80
LISTEN 0 128 *:80 *:*
配置本地hosts文件将www.a.com和www.b.net域名都解析至192.168.1.141nginx服务器上。
192.168.1.141 www.a.com www.b.net
浏览器中请求www.a.com查看结果
浏览器中请求www.b.net查看结果
至此一个非常简单的Nginx反向代理就结束了。工作中后端的服务器不只一台,多台后端服务器时只要在upstream中添加多个server就可以了。另外也可以在tomcat服务器上安装nginx由nginx转发至127.0.0.1:8080。