Nginx反向代理实践

##前言 上一篇解释了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。

转载于:https://my.oschina.net/jiangshanlinux/blog/1514288

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值