Nginx 之六: Nginx服务器的正向及反向代理功能

一:Nginx作为正向代理服务器:

1.正向代理:代理(proxy)服务也可以称为是正向代理,指的是将服务器部署在公司的网关,代理公司内部员工上外网的请求,可以起到一定的安全作用和管理限制作用,正向代理不支持从外网向内网访问资源,一般很少用,经本人测试,效果也不好,有很多页面打不开,在百度搜索的页面也无法返回。

server {
    server_name localhost;
    resolver 202.106.0.20 8.8.8.8; #只能有一个resolve,但是可以用空格隔开,继续写下一个
    resolver_timeout 5s;
    listen  8080;
    location / {
        proxy_pass   $scheme://$http_host/$request_uri;
        proxy_set_header Host $http_host;

        proxy_buffers 256 4k;
        proxy_max_temp_file_size 0;

        proxy_connect_timeout 30;

        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 301 1h;
        proxy_cache_valid any 1m;
    }
}

2.错误码502 :Nginx作为代理服务器向后端转发请求过程中超时。

二:Nginx作为反向代理服务器:

反向代理:反向代理也叫reverse proxy,指的是代理外网用户的请求到内部的指定web服务器,并将数据返回给用户的一种方式,这是用的比较多的一种方式。

反向代理的常用指令:

1.proxy_pass:用来设置将请求转发给的后端服务器的主机,可以是主机名、IP地址:端口的方式,也可以代理到通过upstream设置的主机组,如下:

upstream webserver {
        #ip_hash;
        server  192.168.0.201 weight=1 max_fails=2  fail_timeout=2;
        server  192.168.0.202 weight=1 max_fails=2  fail_timeout=2;
        server 127.0.0.1:9008 backup;
}

server {
        server_name  hfnginx.chinacloudapp.cn;
        #access_log  logs/host.access.log  main;
        location / {  #静态网页在本机
            root   html;
            index  index.html;
        }
        location ~* ^/form {  #指定目录在后端服务器
            proxy_pass  http://webserver; #此处http://webserver后面不能加/,如果加了会提示语法错误
            proxy_set_header X-Real-IP $remote_addr;
        }
}

 2:proxy_hide_header:用于nginx服务器作为反向代理的时候,在返回给客户端http响应的时候,隐藏后端服务版本(如php版本)的信息,可以设置在http/server或location块,如下:

Nginx会将上游服务器的响应转发给客户端,但默认不会转发以下HTTP头部字段:Date、Server、X-Pad和X-Accel-*。使用proxy_hide_header后可以任意地指定哪些HTTP头部字段不能被转发。例如:

proxy_hide_header Cache-Control;
proxy_hide_header MicrosoftOfficeWebServer; 

注:如果是nginx直接作为web服务器,要隐藏版本信息的话,使用fastcgi_hide_header:

3:proxy_pass_header:与proxy_hide_header功能相反,proxy_pass_header会将原来禁止转发的header设置为允许转发,可以设置在http/server或location块例如:

proxy_pass_header X-Accel-Redirect; 

4:proxy_pass_request_body:是否向后端服务器发送HTTP包体部分,可以设置在http/server或location块,如下:

proxy_pass_request_body on|off;  #默认为on

5:proxy_pass_request_headers:是否将客户端的请求头部转发给后端服务器,可以设置在http/server或location块,如下:

proxy_pass_request_headers on | off; #默认为on

6:proxy_set_header:可以更改或添加客户端的请求头部信息内容,并转发之后端服务器,比如在后端服务器想要获取客户端的真实IP的时候,就要更改每一个报文的头部,如下:

proxy_set_header HOST  $remote_addr; #添加HOST到报文头部,其值为客户端的公网IP地址

7:proxy_set_body:更改nginx服务器接收到的客户端请求的请求内容,然后将修改后的请求转发给后端的服务器,用法如下:

proxy_set_body value;  #其中value为要修改的目标内容,可以是变量、文本或者变量的组合。

8:proxy_ip:Nginx 0.8.22版本及以上支持此功能,用于Nginx配置了多个基于域名或IP的主机的情况下,可以指定代理连接到特定的主机处理,就是强制将客户端请求绑定到指定的IP地址:

proxy_bind x.x.x.x; 

9:proxy_connect_timeout:配置nginx服务器与后端服务器尝试建立连接的超时时间,默认为60秒,用法如下:

proxy_connect_timeout 10s; #10s为自定义nginx与后端服务器建立连接的超时时间

10:proxy_read_time:配置nginx服务器向后端服务器或服务器组发起read请求后,等待的超时时间:

proxy_read_time 10s; #默认为60秒

11:proxy_send_time; 配置nginx项后端服务器或服务器组发起write请求后,等待的超时时间:

proxy_send_time 10s; #默认为60s

12:proxy_http_version:用于设置nginx提供代理服务的HTTP协议的版本:

proxy_http_version 1.0|1.1;

13:proxy_method:设置nginx服务器请求后端服务器时使用的方法,一般为POST或者GET,客户端的请求方法将被忽略:

proxy_method GET|PUT;

14:proxy_ignore_client_abort:设置在客户端网络中断请求时,nginx服务器是否中断对被代理服务器的请求:

proxy_ignore_client_abort off|on; #默认为off,当客户端网络中断请求时,nginx服务器中断其对后端服务器的请求。

15:proxy_ignore_headers:设置nginx不处理后端服务器返回的数据中包含某些指定字段的报文,可以指定的有:”X-Accel-Redirect”, “X-Accel-Expires”, “Expires”或”Cache-Control”:

proxy_ignore_headers Expires;

16:proxy_redirect:修改后端服务器返回的响应头部中的location货refresh,与proxy_pass配合使用:

17:proxy_intercept_errors:设置nginx服务器返回客户端的错误状态,当后端服务器返回大于等于400的错误码的是,如果本功能是打开的,则nginx服务器返回自定义的错误页面(使用error page定义的),如果没有开启就将后端服务器返回的HTTP状态直接返回给客户端,默认为关闭:

proxy_intercept_errors on | off;

18:proxy_headers_hash_max_size:设置nginx保存HTTP报文头的hash表的上限,默认为512字节:

proxy_headers_hash_bucket_size 512;#申请nginx保存HTTP报文头的hash表的空间大小,默认为64个字节proxy_headers_hash_max_size 512; #上限server_names_hash_max_szie   512; #设置服务器名称的上限server_namse_hash_bucket_size 512; #申请空间大小

19:proxy_headers_hash_bucket_size:#申请nginx保存HTTP报文头的hash表的空间大小,默认为64个字节

proxy_headers_hash_bucket_size 512; #默认为64字节

20:proxy_net_upstream:当使用了upstream的时候,可以定义在发生了特定的情况下将请求依次交给下一个组内的服务器处理,状态包括:

    proxy_next_upstream  http_404 http_502;  //让404报错进入max_fails计数
        upstream online {
        sticky;
        server 172.28.70.161:8080 max_fails=0 fail_timeout=3s ;
        server 172.28.70.163:8080  max_fails=0 fail_timeout=3s ; 

        check interval=3000 rise=2 fall=1 timeout=1000 type=http;
        check_http_send "GET / HTTP/1.0\r\n\r\n";
        check_http_expect_alive http_2xx http_3xx;
        } 

        upstream backup {
        server 172.28.22.29:7777  max_fails=0 fail_timeout=3s;
        } 

21:proxy_ssl_session_reuse:配置是否基于SSL协议与后端服务器建立连接,如下:

proxy_ssl_session_reuse on | off;

原文地址:https://www.cnblogs.com/myblog1314/p/11162090.html

时间: 2024-07-29 14:35:02

Nginx 之六: Nginx服务器的正向及反向代理功能的相关文章

Nginx系列教程(二)| 一文带你读懂Nginx的正向与反向代理

作者:JackTian 微信公众号:杰哥的IT之旅(ID:Jake_Internet) LAMP 系列导读 01. LAMP 系列教程(一)| 详解 Linux 环境下部署 HTTPD 服务 02. LAMP 系列教程(二)| 如何在 Linux 环境下部署 AWStats 分析系统来监控 Web 站点? 03. LAMP 系列教程(三)| 一文读懂 HTTPD 服务的访问控制 04. LAMP 系列教程(四)| MySQL 数据库系统(一) 05. LAMP 系列教程(五)| MySQL 数据

nginx简介及模块、缓存、反向代理

nginx简介 一.什么是Nginx: 实现web服务.实现web代理功能: 二.nginx的优点: 模块化设计.较好的扩展性,高可靠性,支持热部署,支持事件驱动等: 高可靠: master --> worker 低内存消耗: 10000个keep-alive模式下的connection,仅需要2.5MB的内存: 支持热部署: 不停机而更新配置文件.日志文件滚动.升级程序版本: 支持事件驱动.AIO.mmap: 三.nginx: 首先介绍下httpd的工作模式: httpd: MPM prefo

生产环境中nginx既做web服务又做反向代理

一.写对于初入博客园的感想 众所周知,nginx是一个高性能的HTTP和反向代理服务器,在以前工作中要么实现http要么做反向代理或者负载均衡.尚未在同一台nginx或者集群上同时既实现HTTP又实现反向代理. 那么到底nginx能否既实现HTTP又实现反向代理呢? 答案是肯定的 刚好前段时间在实际项目中有一个类似的情况出现,由此与大伙分享,由于以前没有写博文的习惯,只习惯于自己记录操作实现步骤及稳定,在以前常遇见问题都是百度.谷歌,众位网友的博文帮助自己见解决了很多问题. 由此可见技术分享的重

Nginx反向代理功能

Nginx反向代理: 以入口点的方式接受来自客户端的请求,但是本身不存在任何数据,而是交由后端服务器进行处理后,再返回里客户端 请求            客户端发起请求------>代理服务器------------------------------>后端服务器 返回            后端服务器------------->代理服务器------------------------------>客户端 在这个过程客户端是不主动向后端服务器请求的,后端服务器也不直接向客户端返

nginx的反向代理功能具体示例

实验拓扑图:现在我们要求nginx为后端的三台服务器提供反向代理功能:其中图片服务器单独定义为一个location作为调度,要求配置缓存功能,另外两台web服务器组成负载均衡模式,一主一备,并作健康状态检查,同时在web服务器上配置日志功能,记录真实的客户端ip地址. 首先我们来准备实验的基础环境: 反向代理服务器两台网卡分别连接互联网以及跟后端的upstream server通信 反向代理服务器端配置: yum install -y nginx //安装nginx服务 systemctl st

nginx全面解析【负载均衡、反向代理、高可用、宕机容错】

nginx全面解析[负载均衡.反向代理.高可用.宕机容错]原创itcats_cn 最后发布于2018-09-06 10:24:33 阅读数 15799 收藏展开什么是nginx?nginx是一款高性能的http服务器,官方测试nginx能够支支撑5万并发链接,并且cpu.内存等资源消耗却非常低,运行非常稳定,所以现在很多知名的公司都在使用nginx. nginx有什么作用?1.负载均衡(可以减轻单台服务器的压力) 2.反向代理(隐藏企业真实的ip地址) 3.搭建虚拟服务器 4.用做静态服务器(实

Nginx 之六: Nginx服务器的反向代理功能

一:Nginx作为代理服务器: 1.1.正向代理:代理(proxy)服务也可以称为是正向代理,指的是将服务器部署在公司的网关,代理公司内部员工上外网的请求,可以起到一定的安全作用和管理限制作用,正向代理不支持从外网向内网访问资源,一般很少用. server { resolver 8.8.8.8; resolver_timeout 5s; listen 0.0.0.0:8080; access_log /home/reistlin/logs/proxy.access.log; error_log

Nginx服务器的安装与反向代理负载均衡

Nginx服务器 一:什么是Nginx? 我们生活的世界中,有的时候需要上网.我们可以浏览很多很多的网页,这些网页都是由一系列的程序组成,但是我们是否想过,这些程序存储在什么地方呢?没错,这些程序都是存储在一种名叫服务器的硬件上,比如我们的电脑也是一种服务器,只不过我们的个人电脑作为服务器的话性能会比较低.我们的网页程序存储在服务器硬件上,是否可以随意存储呢?不是的,我们需要在服务器硬件的操作系统中搭建一个服务器软件,那么这样,有服务器软件跟服务器硬件配合,才形成一个完整的服务器.服务器软件有非

Nginx安装配置实现用户认证、反向代理、隐藏版本号

一.Nginx安装 1.检查并且安装依赖组件           检查安装nginx的模块需要第三方库的支持,检查是否安装下列库:zlib.zlib-devel.openssl.openssl-devel.pcre.pcre-devel如果没有,则全部装上          # rpm -qa | grep pcre  ##没有任何信息则没安装 2.安装pcre,pcre-devel # tar -zxvf pcre-6.6.9.tar.gz          # cd pcre-6.6.9/