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為acacheproxy_cache_path /var/cache/nginx/a.com levels=2:1 keys_zone=acache:10m max_size=1g;# 定義b.net域名的緩存目錄,緩存zone為bcacheproxy_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
總結
以上是生活随笔為你收集整理的Nginx反向代理实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux服务器CPU性能模式
- 下一篇: 【Nginx服务优化与防盗链】