Nginx 反向代理工作原理简介与配置详解

测试环境
CentOS 6.8-x86_64
nginx-1.10.0
下载地址:http://nginx.org/en/download.html
安装 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 --withpcre=/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@localhostnginx-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.cnblogs.com/Alinxgood/p/7902573.html

Nginx 反向代理工作原理简介与配置详解相关推荐

  1. nginx反向代理模块配置详解_Nginx(三):反向代理负载均衡集群配置详解

    概述: 本篇主要总结Nginx实现反向代理和负载均衡功能相关模块的配置说明.主要使用到的模块如下:ngx_http_proxy_moduleNginx实现反向代理功能 ngx_http_upstrea ...

  2. 使用LVS实现负载均衡原理及安装配置详解

    使用LVS实现负载均衡原理及安装配置详解 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均 ...

  3. FTP服务的简介和配置详解

    FTP服务的简介和配置详解 注意:配置FTP服务时,最好关闭防火墙和selinux 1.FTP服务简介 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为& ...

  4. 光纤收发器的原理及应用_光纤收发器的工作原理以及使用方法详解!

    原标题:光纤收发器的工作原理以及使用方法详解! 关于光纤收发器的工作原理以及使用方法这块,在这里飞畅科技的小编做了专门的整理,首先,我们来了解下什么是光纤收发器,光纤收发器是一种将短距离的双绞线电信号 ...

  5. Nginx代理介绍、安装及配置详解

    nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外 ...

  6. nginx免安装版资源,config配置详解

    前言:今天给同事看他本地nginx的报错,虽然我也是半吊子,但觉得可能还是配置问题,所以把配置捋了一遍,做个学习记录,也希望能帮到有需要的人,如有错误感谢指出. 文章目录 资源介绍 一.目录结构介绍 ...

  7. Nginx 反向代理与负载均衡的配置

    已经很久没有写博了,因为最近学车加上各种问题一直没时间, 今天刚好想起有好多的东西还没来得及记录.回到正题: Nginx是一个非常强大的web轻量级服务器,许多大厂也用Nginx进行负载均衡和反向代理 ...

  8. nginx通过反向代理实现未备案域名访问详解

    本方法实现前提是8123端口(也可以是其他端口)面对互联网打开.server里面监听80端口,然后反向代理8123端口. 1.其中server_name部分是我的域名可以替换成其他想要的域名 2.81 ...

  9. Java多线程之线程池7大参数、底层工作原理、拒绝策略详解

    Java多线程之线程池7大参数详解 目录 企业面试题 线程池7大参数源码 线程池7大参数详解 底层工作原理详解 线程池的4种拒绝策略理论简介 面试的坑:线程池实际中使用哪一个? 1. 企业面试题 蚂蚁 ...

最新文章

  1. python获取数据类型_python数据类型详解
  2. 原创 | 一文详解阿里云《人工智能红利渗透与爆发》技术趋势
  3. 【CVPR 2020】神经网络架构搜索(NAS)论文和代码汇总
  4. 网站在收录后还需要做什么?
  5. STM32 电机教程 31 - 无刷无感控制原理
  6. 一文读懂线程池的工作原理(故事白话文)
  7. 将Object structure IBASE从UI上隐藏
  8. vue --- 过滤器、计算、方法、观察属性
  9. jvm运行时类加载机制_JVM体系结构:JVM类加载器和运行时数据区
  10. 物联网终端五年后将超 270 亿!破竹之势下程序员如何修炼内功?
  11. JavaScript等同于printf / String.Format
  12. 【QA】哈工大张伟男:任务型对话系统
  13. kali linux如何更新软件源
  14. 谈谈Python的编译和反编译
  15. 阅读《人类简史》-- 1.认知革命
  16. IE8 使用 Oracle ERP
  17. webrtc 之 sip trickle ice
  18. 北京冬奥会“科技感”拉满,有这些AI黑科技你了解吗?
  19. Java————ActionListener
  20. 踏板摩托车uu125更换机油过程

热门文章

  1. Debian 10发布:基于Linux 4.19内核,包含5.9万软件包
  2. Linux下实现多网卡绑定
  3. 解决“显示桌面”快捷方式的丢失
  4. qmail+spamassassin启用spf过滤
  5. 运维工程师该干什么学些什么
  6. 库函数strlen源码重现及注意问题
  7. [zz]Ubuntu10.04源 更新源列表
  8. CCNP OSPF协议详解
  9. Ironic 裸金属实例的部署流程
  10. Oracle 用户概念与基本操作