生产环境中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:
生产环境中nginx既做web服务又做反向代理的更多相关文章
- 一个完整配置例nginx.conf(生产环境中使用)
一个完整的nginx配置案例,生产环境 一个完整配置例(生产环境中使用) user nobody nobody; worker_processes 4; worker_rlimit_nofile 51 ...
- 生产环境中tomcat的配置
生产环境中要以daemon方式运行tomcat 通常在开发环境中,我们使用$CATALINA_HOME/bin/startup.sh来启动tomcat, 使用$CATALINA_HOME/bin/sh ...
- CentOS7.1下生产环境Keepalived+Nginx配置
CentOS7.1下生产环境Keepalived+Nginx配置 [日期:2015-07-20] 来源:Linux社区 作者:soulful [字体:大 中 小] 注:下文涉及到配置的,如无特别 ...
- Kubernetes用户指南(三)--在生产环境中使用Pod来工作、管理部署
一.在生产环境中使用Pod来工作 本节将介绍一些在生产环境中运行应用非常有用的功能. 1.持久化存储 容器的文件系统只有当容器正常运行时有效,一旦容器奔溃或者重启,所有对文件系统的修改将会丢失,从一个 ...
- 生产环境中 Ngx_lua 使用技巧和应用的范例
生产环境中 Ngx_lua 使用技巧和应用的范例 时间 -- :: 51CTO技术博客 原文 http://rfyiamcool.blog.51cto.com/1030776/1252501 主题 L ...
- 理解Docker(6):若干企业生产环境中的容器网络方案
本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...
- 生产环境中CentOS7部署NET Core应用程序
NET Core应用程序部署至生产环境中(CentOS7) 阅读目录 环境说明 准备你的ASP.NET Core应用程序 安装CentOS7 安装.NET Core SDK for CentOS7. ...
- 生产环境中使用Docker Swarm的一些建议
译者按: 实践中会发现,生产环境中使用单个Docker节点是远远不够的,搭建Docker集群势在必行.然而,面对Kubernetes, Mesos以及Swarm等众多容器集群系统,我们该如何选择呢?它 ...
- Kubernetes 在生产环境中常用架构
Kubernetes 在生产环境中常用架构 首先,我们来梳理下Kubernetes生产架构,其设计适用于绝大多数环境.如下图所示 在该架构中,我们可以将其分为四层,如下: Client层:即Kuber ...
随机推荐
- Provided Maven Coordinates must be in the form 'groupId:artifactId:version'.
[hadoop@hadoop1 bin]$ ./spark-shell --packages org.mongodb.spark:mongo-spark-connector_2.10-2.2.1 Ex ...
- BZOJ3260: 跳
BZOJ3260: 跳 Description 邪教喜欢在各种各样空间内跳.现在,邪教来到了一个二维平面. 在这个平面内,如果邪教当前跳到了(x,y),那么他下一步可以选择跳到以下4个点: (x-1, ...
- SpringMVC+ajaxFileUpload上传图片 IE浏览器弹下载框问题解决方式
如题,简单记录一下这个问题的解决的方法,导致问题的核心原因是:ajaxfileupload不支持响应头ContentType为application/json的设置.而且IE也不支持这样的格式,而当我 ...
- ios常用到的第三方库
在iOS开发中不可避免的会用到一些第三方类库,它们提供了很多实用的功能,使我们的开发变得更有效率:同时,也可以从它们的源代码中学习到很多有用的东西. Reachability 检测网络连接 用来检查网 ...
- String常量池
http://developer.51cto.com/art/201106/266454.htm
- 织梦DEDE后台定时分时段自动更新发布文章插件
定时审核插件使用说明 一.立信CPA培训注册会计师考试网站 以超级管理员身份登录后台,依次选择[核心]à [定时审核管理],输入定时审核的时间段,如下图所示: 功能说明: 1. 可以设置若干时间段,在 ...
- javascript中的_return_false和return_true
1. [代码][JavaScript特效]代码 关于javascript中的 return false和return true 2008年12月22日 星期一 下午 09:31return 是 ...
- 「HAOI2015」「LuoguP3178」树上操作(树链剖分
题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的点权都增 ...
- python-----删除列表中某个元素的3种方法
python中关于删除list中的某个元素,一般有三种方法:remove.pop.del: 1.remove: 删除单个元素,删除首个符合条件的元素,按值删除举例说明: >>> st ...
- robotframework之APP混合H5自动化测试
app中有webview的情况 手机淘宝的天猫国际页面是一个webview robotframework代码: *** Settings *** Suite Setup Suite Teardown ...