Nginx 反向代理工作原理简介与配置详解
Nginx反向代理工作原理简介与配置详解
by:授客 QQ:1033553122
测试环境
CentOS 6.5-x86_64
nginx-1.10.0
下载地址:http://nginx.org/en/download.html
下载地址:http://pan.baidu.com/s/1skNT7zv
安装nginx
[root@localhost mnt]# tar -xzvf nginx-1.10.0.tar.gz
[root@localhost mnt]# cd nginx-1.10.0
[root@localhost nginx-1.10.0]# ./configure --prefix=/usr/local/ngnix --with-pcre=/mnt/pcre-8.36
Configuration summary
+ using PCRE library: /mnt/pcre-8.36
+ OpenSSL library is not used
+ using builtin md5 code
+ sha1 library is not found
+ using system zlib library
nginx path prefix: "/usr/local/ngnix"
nginx binary file: "/usr/local/ngnix/sbin/nginx"
nginx modules path: "/usr/local/ngnix/modules"
nginx configuration prefix: "/usr/local/ngnix/conf"
nginx configuration file: "/usr/local/ngnix/conf/nginx.conf"
nginx pid file: "/usr/local/ngnix/logs/nginx.pid"
nginx error log file: "/usr/local/ngnix/logs/error.log"
nginx http access log file: "/usr/local/ngnix/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
注:
1、编译时,指定了pcre安装目录,但是安装出错,解决方法如上,指定源码所在目录
2、如果不指定--with-pcre 选项,会报类似如下的错误
3、需要预先安装gcc-c++
[root@localhost nginx-1.10.0]# make && make install
略
启动ngnix
[root@localhost nginx-1.10.0]# /usr/local/ngnix/sbin/nginx -c /usr/local/ngnix/conf/nginx.conf
反向代理工作原理
客户端向反向代理发送请求,接着反向代理转发请求至目标服务器,并把获得的内容返回给客户端

反向代理配置
测试链接:
http://192.168.1.104/zentaopms/www/index.php?
http://192.168.1.104/zentaopms/www/index.php?m=project&f=create
如上,想通过192.168.1.103代理服务器访问上述测试链接,具体咋操作呢?如下
编辑所使用的配置文件
[root@localhost nginx-1.10.0]# vim /usr/local/ngnix/conf/nginx.conf
找到“Server”结点,增加入下带背景色内容
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /zentaopms/www/ {
proxy_pass http://192.168.1.104;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
重新加载配置文件
[root@localhost nginx-1.10.0]# /usr/local/ngnix/sbin/nginx -s reload
访问测试url
如下,OK

说明:
传递请求给被代理服务器
为了把请求传递给被代理服务器,需要在location中指定proxy_pass机制。如下
location /some/path/ {
proxy_pass http://www.example.com/link/;
}
proxy_pass既可以是ip地址,也可以是域名,同时还可以指定端口
location ~ \.php {
proxy_pass http://127.0.0.1:8000;
}
注意:如果proxy_pass指定的地址携带了URI,如上例中 /link/,那么这里的URI将替换请求URI中匹配location参数的部分,比如 请求 /some/path/page.html,将被替换为http://www.example.com/link/page.html。
另外,如果请求不是发往http类型的被代理服务器,则选择如下之一:
- fastcgi_pass 传递请求给FastCGI 服务器
- uwsgi_pass 传递请求给uwsgi服务器
- scgi_pass传递请求给SCGI服务器
- memcached_pass传递请求给memcached服务器
请求也可以发往一命名的组服务器,这种请求下,将根据指定方法,在这些服务器之中进行请求的分发。
传递请求头
默认的,nginx在被代理请求中定义两个头域:Host和Connection,并且清除包含空值的头域。Host被设置为$proxy_host变量,而Connection则被设置为close。
使用proxy_set_header机制可修改默认配置及其它头域的值。可以在location中,server上下文,http块或者其它更高层级中指定这种机制。
例子:
location /some/path/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://localhost:8000;
}
如果想阻止某个头域被传递给被代理服务器,可以如下设置头域的值为空
location /some/path/ {
proxy_set_header Accept-Encoding "";
proxy_pass http://localhost:8000;
}
配置缓冲(Buffer)
默认的,Ngnix buffering来自被代理服务器的响应。Ngnix在内部buffering中存储响应,直到收到整个响应后才发送给客户端。对于慢客户端来说,buffering可优化性能,这样,如果响应从Nginx同步传递给客户端,这将会浪费被代理服务器的时间。但是,如果开启buffering,Nginx允许被代理服务器快速处理请求,因为Nginx会尽可能久的存储来自被代理服务器的响应,直到客户端下载它们。
使用proxy_buffering机制开启或关闭缓冲。默认的,开启缓冲。
proxy_buffers控制buffer大小和分配给请求的buffer数量。来自被代理服务器响应中的第一部分被存储在单一的buffer中,该buffer的大小由proxy_buffer_size设定。该部分通常包含一个相对较小的响应头,其大小可以设置成比用于存储剩余响应部分buffer小。
例子:
location /some/path/ {
proxy_buffers 16 4k;
proxy_buffer_size 2k;
proxy_pass http://localhost:8000;
}
如果关闭buffering,当从被代理服务器接收到响应时,将被同步把响应发往客户端。这对于想尽快收到请求的快速交互客户端来说。这是其想要的。
例子:关闭buffering
location /some/path/ {
proxy_buffering off;
proxy_pass http://localhost:8000;
}
这种情况下,nginx只用proxy_buffer_size来存储响应的当前部分。
选择一个出口 IP地址
如果代理服务器有多个网络接口,有时候需要选择特定的源ip地址来连接到代理服务器。当被代理服务器被设置为只接受来自特定IP地址或者IP范围的连接请求时,这特别有用。
例:
location /app1/ {
proxy_bind 127.0.0.1;
proxy_pass http://example.com/app1/;
}
location /app2/ {
proxy_bind 127.0.0.2;
proxy_pass http://example.com/app2/;
}
ip地址也可以是一个变量
例:
location /app3/ {
proxy_bind $server_addr;
proxy_pass http://example.com/app3/;
}
参考链接:
https://www.nginx.com/resources/admin-guide/reverse-proxy/
Nginx 反向代理工作原理简介与配置详解的更多相关文章
- centos6.5环境自动化运维之puppet实现nginx反向代理功能及puppet安装配置详解
puppet是一种Linux.Unix.windows平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件.用户.cron任务.软件包.系统服务等.puppet把这些系统实体称之为资 ...
- Nginx 反向代理 负载均衡 虚拟主机配置
Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...
- 【转】Nginx 反向代理 负载均衡 虚拟主机配置
原文:http://www.cnblogs.com/itdragon/p/8059000.html Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代 ...
- nginx 反向代理 与 Apache backend的配置联合配置
nginx 反向代理 与 Apache backend的配置联合配置: 说明: nginx 将http映射到Apache上的特定子目录. 配置方法步骤: 1. 设置域名, 子域名映射到指定服务器ip ...
- (转)使用LVS实现负载均衡原理及安装配置详解
使用LVS实现负载均衡原理及安装配置详解 原文:https://www.cnblogs.com/liwei0526vip/p/6370103.html
- 二.Nginx反向代理和静态资源服务配置
2018年03月31日 10:30:12 麦洛_ 阅读数:1362更多 所属专栏: nginx 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/M ...
- nginx在linux上的安装与配置详解(一)
Nginx的安装与配置详解 (1)nginx简介 nginx概念: Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like ...
- Nginx反向代理和负载均衡的配置
1.反向代理配置 反向代理也称"动静分离",nginx不自己处理图片的相关请求,而是把图片的请求转发给其他服务器来处理. 修改nginx部署目录下conf子目录的nginx.con ...
- Nginx 反向代理与负载均衡的配置
已经很久没有写博了,因为最近学车加上各种问题一直没时间, 今天刚好想起有好多的东西还没来得及记录.回到正题: Nginx是一个非常强大的web轻量级服务器,许多大厂也用Nginx进行负载均衡和反向代理 ...
随机推荐
- 第十节:详细讲解一下Java多线程,随机文件
前言 大家好,给大家带来第十节:详细讲解一下Java多线程,随机文件的概述,希望你们喜欢 多线程的概念 线程的生命周期 多线程程序的设计 多线程的概念 多线程的概念:程序是静态的,进程是动态的.多进程 ...
- String类、常量池、字符串比较
String类.常量池.字符串比较 一:String类 1.String类又称作不可变字符序列 2.String位于java.lang包中,Java程序默认导入 ...
- centos7上安装cacti监控
简介 在企业网络运维过程中,管理员必须时刻关注服务器的运行状态,如CPU.内存.磁盘空间使用情况等.为了能够及时的发现问题,尽量减少故障的发生.当网络中的设备,服务器等数量较多时,可以部署一套监控系 ...
- Pycharm 连接Linux 远程开发
Pycharm 连接Linux 远程开发 在Liunx上安装python3.6(Ubuntu16) 下载Python-3.6.4.tgz 解压 tar -xzvf Python-3.6.4.tgz 进 ...
- 死磕 java集合之ArrayDeque源码分析
问题 (1)什么是双端队列? (2)ArrayDeque是怎么实现双端队列的? (3)ArrayDeque是线程安全的吗? (4)ArrayDeque是有界的吗? 简介 双端队列是一种特殊的队列,它的 ...
- hive中的子查询改join操作(转)
这些子查询在oracle和mysql等数据库中都能执行,但是在hive中却不支持,但是我们可以把这些查询语句改为join操作: -- 1.子查询 select * from A a where a.u ...
- Visual Studio For MacOS 踩坑记(二)
Visual Studio For MacOS安装安卓SDK. 系统默认安装了安卓6.0 API23的SDK. 但是我需要安卓7.0的,API24. 遂安装. SDK可以下载成功,但是用Visu ...
- GNum试用体验
只需在GNum上注册一个用户名,填上自己的电话号码,它就会自动生成一个URL,你的朋友(可以不注册GNum)在浏览器上进入这个 URL,就可以给你的手机打电话,目前可以免费通话200分钟,而且如果你邀 ...
- 比较两个DataTable是否相等
/// <summary> /// 比较两个DataTable内容是否相等,先是比数量,数量相等就比内容 /// </summary> ...
- 数据库设计---PowerDesigner(物理模型和概念模型)
内容 第一种方法:概念模型转物理模型 1.首先新建模型--选择概念模型(CDM) 2.新建实体(学生和卡),设置相应的属性 3.一共四种关系(1:1,1:n,n:1,n:n),根据 ...