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

 

by:授客  QQ1033553122

 

测试环境

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 反向代理工作原理简介与配置详解的更多相关文章

  1. centos6.5环境自动化运维之puppet实现nginx反向代理功能及puppet安装配置详解

    puppet是一种Linux.Unix.windows平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件.用户.cron任务.软件包.系统服务等.puppet把这些系统实体称之为资 ...

  2. Nginx 反向代理 负载均衡 虚拟主机配置

    Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...

  3. 【转】Nginx 反向代理 负载均衡 虚拟主机配置

    原文:http://www.cnblogs.com/itdragon/p/8059000.html Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代 ...

  4. nginx 反向代理 与 Apache backend的配置联合配置

    nginx 反向代理 与 Apache backend的配置联合配置: 说明: nginx 将http映射到Apache上的特定子目录. 配置方法步骤: 1.  设置域名, 子域名映射到指定服务器ip ...

  5. (转)使用LVS实现负载均衡原理及安装配置详解

    使用LVS实现负载均衡原理及安装配置详解 原文:https://www.cnblogs.com/liwei0526vip/p/6370103.html

  6. 二.Nginx反向代理和静态资源服务配置

    2018年03月31日 10:30:12 麦洛_ 阅读数:1362更多 所属专栏: nginx   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/M ...

  7. nginx在linux上的安装与配置详解(一)

    Nginx的安装与配置详解 (1)nginx简介     nginx概念: Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like ...

  8. Nginx反向代理和负载均衡的配置

    1.反向代理配置 反向代理也称"动静分离",nginx不自己处理图片的相关请求,而是把图片的请求转发给其他服务器来处理. 修改nginx部署目录下conf子目录的nginx.con ...

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

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

随机推荐

  1. docker:(2)通过Dockerfile构建镜像并发布web项目

    上一篇讲解了docker的基本使用 http://www.cnblogs.com/xiaochangwei/p/8204511.html 虽然通过修改获取到的镜像可以达到使用目的,但是多操作几次就会发 ...

  2. linux下的初始化系统systemd简科普

    systemd是什么?名字很奇怪,不认识. 扒一扒wiki,你就会知道我是谁了? 在下有眼不识泰山,原来你就是盘古老爷爷用的开天辟地大斧头啊. 贫穷不可怕,可怕的是贫穷限制了你的想象--------- ...

  3. CSS 常用技巧

    概述 相信大家在写css属性的时候,会遇到一些问题,比如说:垂直对齐,垂直居中,背景渐变动画,表格宽度自适应,模糊文本,样式重置,清除浮动,通用媒体查询,自定义选择文本,强制出现滚动条,固定头部和页脚 ...

  4. CentOS7安装tyk(内部部署)

    CentOS7安装tyk(内部部署) 参考 官方文档 github 环境准备 #确保端口3000处于打开状态:Dashboard使用该端口来提供GUI和Developer Portal #Tyk需要P ...

  5. 基于python+appium+yaml安卓UI自动化测试分享

    结构介绍 之前分享过一篇安卓UI测试,但是没有实现数据与代码分离,后期维护成本较高,所以最近抽空优化了一下.不想看文章得可以直接去Github,欢迎拍砖大致结构如下:   结构.png testyam ...

  6. jdk8- list操作

    本文版权归 远方的风lyh和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. student类 public class Student { private String age; ...

  7. Python 【web框架】之Flask

    flask 是Python实现的轻量级web框架.没有表单,orm等,但扩展性很好.很多Python web开发者十分喜欢.本篇介绍flask的简单使用及其扩展. 文中示例源码已经传到github:h ...

  8. 进程间通信IPC-信号

    1,signal-ANSI C信号处理 #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal ...

  9. baguetteBox.js - 简单易用的 lightbox 插件

    baguetteBox.js 是一个简单和易于使用的响应式的图像 Lightbox 插件,支持滑动手势在移动设备上使用.纯 JavaScript 实现,不依赖第三方库和插件,赶紧来体验吧. 在线演示  ...

  10. 如何做自己的服务监控?spring boot 2.x服务监控揭秘

    Actuator是spring boot项目中非常强大一个功能,有助于对应用程序进行监视和管理,通过 restful api请求来监管.审计.收集应用的运行情况,针对微服务而言它是必不可少的一个环节. ...