众所周知,Nginx是一个高性能的HTTP和反向代理服务器,在以前工作中要么实现http要么做反向代理或者负载均衡。尚未在同一台Nginx或者集群上同时既实现HTTP又实现反向代理。
那么到底Nginx能否既实现HTTP又实现反向代理呢?
答案是肯定的
刚好前段时间在实际项目中有一个类似的情况出现,由此与大伙分享,由于以前没有写博文的习惯,只习惯于自己记录操作实现步骤及稳定,在以前常遇见问题都是百度、谷歌,众位网友的博文帮助自己见解决了很多问题。
由此可见技术分享的重要性,好在现在自我感觉对于linux有了一定的了解,目前正在进行对以前工作文档的整理,以后会逐步在博文中与大家分享。
闲话少说:
以下是如何实现在Nginx上既实现HTTP又实现反向代理。
二、环境概述:
由于是生产环境而且有一定的秘密可言涉及到的ip地址会做一些处理:
描述外网访问通过防火墙NAT负载均衡地址访问nginx提供的web服务器访问主要业务,部分业务需要有nginx代理至内网web服务器,由于内网有防火墙和负载均衡,且内网负载均衡也被防火墙nat了一个地址出来作为提供服务,所以在此可以忽略内网ip地址,以下只是对于nginx服务器进行操纵。nginx所代理的地址为XXXXX(由于生产环境故而隐去地址。)
三、实际配置:
本文只讲述nginx同时提供web和代理服务由此安装nginx忽略。
1、配置web服务器.
在nginx配置文件目录下及nginx路径下的conf文件下nginx主配置文件其实相当简单主要配置为以下:
nginx.conf文件
#user root;
worker_processes 4; #采用worker进程模式默认1,这里设置成4,根据服务器的cpu数量设定,最大不超过cpu数量的2倍
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024; #在events下其实还有epoll模型不过在此nginx版本中默认就是epoll
}
http {
include mime.types;
default_type application/octet-stream;
load_iguard /usr/local/iguard/syncserver/mod_nginx/libigx.so /usr/local/iguard/syncserver/mod_nginx/mod_iguard3.conf;
enable_iguard on;
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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
include extra/upstream.conf; #这里是关键在conf目录下创建一个upstream.conf文件来设置web服务站点以及反向代理,的话所有配置必须在主配置文件中,为了使配置更有层次感这里将配置拆分。
#gzip on;
}
2、在conf目录下的extra/upstream.conf;默认是没有这个文件的必须手动创建;
先cd 到conf/(根据实际情况conf在nginx的安装路径下如nginx安装在/usr/local下那么conf文件就在/usr/local/nginx/conf下)下面
以在nginx安装在/usr/local为例子:
cd /usr/local/nginx/conf
mkdir extra
cd extra
vim upstream.conf 或者是vi upstream.conf 以下配置只是部分。
upstream trs { #给代理服务命名只是本地有效方便代理调用,trs表示名字,实际上可以取任何名字:如张三李四都行。
server xx.xx.xx.xx:8080; #真实服务器地址实际上是防火墙映射了内网负载均衡地址及端口。对于nginx做负载均衡也在此配置只需加多