内容简介:生产环境中Nginx既做Web服务又做反向代理
一、感想
众所周知,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做负载均衡也在此配置只需加多
个server即可实现负载均衡,nginx做负载均衡 默认算法是wrr 权重轮询 。由于在此内网环境中已经有防火墙和负载均衡故而只需写防火墙映射出来的地址及端口.
负载均衡可参考 http://nginx.org/en/docs/http/ngx_http_upstream_module.html
} #这里只以一个需要反向大力的服务为例子;真实环境有8个服务。实际上配置都一样。
server {
listen 80; #nginx监听80端口用以提供web服务。
server_name localhost;
ssi on;
ssi_silent_errors off;
ssi_types text/shtml;
#charset koi8-r;
root /ucap/websites;
#access_log logs/host.access.log main;
location /{
autoindex on;
root /xxx/websites;
index index.html index.htm index.shtml;
}
location /zgcd {
autoindex on;
alias /xxx/websites/zgcd;
index index.html index.htm index.shtml;
}
location /qlsgzxxw {
autoindex on;
alias /xxx/websites/qlsgzxxw;
index index.html index.htm index.shtml;
}
location /cdstb {
autoindex on;
alias /xxx/websites/cdstb;
index index.html index.htm index.shtml;
}
#####红色部分配置为提供web服务配置。
location /trsapp{ #此配置为提供代理服务配置
root /ucap/websites;
proxy_pass http://trs/trsapp;
#这里调用的是upstream下的名字表示的是用一旦访问web站点下/trsapp及代理至http://10.1.1.1:8080/trsapp
proxy_redirect default;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host:8001; #这里是关键由于这个问题花费了一天时间才查出问题关键,稍后会有代理故障问题会展示。
proxy_set_header Cookie $http_cookie;
}
#server {
# listen 81;
# server_name localhost;
# #??
# location / {
# proxy_pass http://23.202.1.211;
# }
# }
3、upstream配置参数说明:
Proxy 主要选项:
| proxy_set_header |
设置由后端服务器获取用户的主机名或者真实的 ip 地址,以及代理者的真实 ip 地址。 |
| client_body_buffer_size |
用户制定客户端请求主体缓冲区大小,可以理解为先保存到本地再传给用户。 |
| proxy_connect_timeout |
表示与后台的服务器连接超时时间,即发起握手等候的响应超时时间。 |
| proxy_send_timeout |
表示后端服务器的数据回传时间,即再规定时间之内后端服务器必须传完所有数据,否则, nginx 将断开这个连接。 |
| proxy_read_timeout |
设置 nginx 从代理的后端服务器获取信息的时间,表示连接建立成功后, nginx 等待后端服务器的响应时间,其实是 nginx 已经进入后端的排队之中等候处理的时间。 |
| proxy_buffer_size |
设置缓冲区大小,默认,该缓冲区大小等于指令 proxy_buffer_size 设置的大小 |
| proxy_buffers |
设置缓冲区的数量和大小, nginx 从代理的后端服务器获取的响应信息,会放置再缓冲区。 |
| proxy_busy_buffer_size |
设置系统繁忙是将可使用 proxy_buffers 大小,官方推荐为: proxy_buffers 的两倍 |
| proxy_temp_file_write_size |
指定 proxy 缓存临时文件的大小。 |
可参考:http://liuyu.blog.51cto.com/183345/166381/
4、对 proxy_set_header Host $host:8001;当不指定端口 而引起的故障问题 1)故障重现稍后:
2)解决方法 proxy_set_header Host $host:8001; :
四、测试实现功能:
web已经能实现可以看出采用的是web配置中的/cdstb
代理功能实现点击web服务在线互动中的电子信箱nginx代理至后台服务器/trsapp:
CentOS 6.2实战部署Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm
使用Nginx搭建WEB服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm
搭建基于Linux6.3+Nginx1.2+PHP5+MySQL5.5的Web服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm
CentOS 6.3下Nginx性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm
CentOS 6.3下配置Nginx加载ngx_pagespeed模块 http://www.linuxidc.com/Linux/2013-09/89657.htm
CentOS 6.4安装配置Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm
Nginx安装配置使用详细笔记 http://www.linuxidc.com/Linux/2014-07/104499.htm
Nginx日志过滤 使用ngx_log_if不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm
Nginx 的详细介绍 : 请点这里
Nginx 的下载地址 : 请点这里
本文永久更新链接地址 : http://www.linuxidc.com/Linux/2017-04/142787.htm
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Vue多环境代理配置
- 网络抓包调试代理工具大全、开发环境切换工具大全
- 在开发环境下使用nginx重写uri及代理功能
- Nginx入门及如何反向代理解决生产环境跨域问题
- Nginx 反向代理实现微信开发完美线上测试环境
- [译] 为何要对生产环境的 Node.js 使用反向代理?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Developing Large Web Applications
Kyle Loudon / Yahoo Press / 2010-3-15 / USD 34.99
As web applications grow, so do the challenges. These applications need to live up to demanding performance requirements, and be reliable around the clock every day of the year. And they need to withs......一起来看看 《Developing Large Web Applications》 这本书的介绍吧!