Nginx正向代理与Client设置代理上网

文章目录
  1. 1. 介绍
    1. 1.1. Nginx介绍
    2. 1.2. Nginx的应用场景
    3. 1.3. 什么是代理
      1. 1.3.1. 正向代理
      2. 1.3.2. 反向代理
  2. 2. 安装nginhx
  3. 3. yum方式
    1. 3.1. 编译安装
  4. 4. nginx负载均衡
  5. 5. Server端 - 配置正向代理
    1. 5.1. 配置server
  6. 6. Client端 - 配置代理上网
    1. 6.1. 设置http代理
      1. 6.1.1. 修改配置
      2. 6.1.2. 永久生效代理
      3. 6.1.3. 马上生效
      4. 6.1.4. 取消代理
    2. 6.2. 设置https代理
      1. 6.2.1. 安装nginx第三方模块
      2. 6.2.2. 配置config
      3. 6.2.3. 测试配置正确性
      4. 6.2.4. 重启nginx并生效配置
  7. 7. 参考资料

介绍

Nginx介绍

Nginx是一个http服务器。是一个使用c语言开发的高性能的http服务器及反向代理服务器。Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。

Nginx的应用场景

  1. http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。

  2. 虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。

  3. 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。

什么是代理

nginx的正向代理,只能代理http、tcp等,不能代理https请求。有很多人不是很理解具体什么是nginx的正向代理、什么是反向代理。下面结合自己的使用做的一个简介:

正向代理

所谓正向代理就是内网服务器主动要去请求外网的地址或服务,所进行的一种行为。内网服务---访问--->外网

反向代理

所谓反向代理就是外网要访问内网服务而进行的一种行为。 外网----请求--->内网服务

安装nginhx

yum方式

yum安装,需安装第三方yum源,因为nginx默认不在centos的yum源中所以需更新

yum install wget #安装下载工具
wget http://www.atomicorp.com/installers/atomic #下载
sh ./atomic #安装
yum check-update #更新yum源 有的需要更新几次 才有nginx最新版本 否则是老版本nginx
yum remove httpd* php*  #删除系统自带的软件包 也可加mysql*前提备份数据库
yum install nginx #安装nginx根据提示输入y进行安装
chkconfig nginx on #设置nginx开机启动

#检查服务配置文件
sudo nginx -t
#nginx: configuration file /etc/nginx/nginx.conf test is successful  表示配置文件符合标准配置,解析成功

#sudo service nginx {start|stop|status|restart|reload|configtest|}

#启动服务
sudo service nginx start

#停止服务
sudo service nginx stop

编译安装

wget http://nginx.org/download/nginx-1.7.8.tar.gz
tar -zxvf nginx-1.7.8.tar.gz
cd nginx-1.7.8
./configure
make && make install

nginx负载均衡

由于整片篇幅,此处只介绍nginx的负载均衡简单的配置。
nginx 的 upstream默认是以轮询的方式实现负载均衡,这种方式中,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

另外一种方式是ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题

修改 /etc/nginx/nginx.conf
#负载均衡配置
upstream backend {
  #ip_hash;
  server 192.168.20.193;      // server 1
  server 192.168.20.194;      // server 2
}

Server端 - 配置正向代理

配置server

server {
  # 配置DNS解析IP地址,比如 Google Public DNS,以及超时时间(5秒)
  resolver 8.8.8.8;    # 必需
  resolver_timeout 5s;

  # 监听端口
  listen 8080;

  access_log  /home/reistlin/logs/proxy.access.log;
  error_log   /home/reistlin/logs/proxy.error.log;

  location / {
    # 配置正向代理参数
    proxy_pass $scheme://$host$request_uri;
    # 解决如果URL中带"."后Nginx 503错误
    proxy_set_header Host $http_host;

    # 配置缓存大小
    proxy_buffers 256 4k;
    # 关闭磁盘缓存读写减少I/O
    proxy_max_temp_file_size 0;
     # 代理连接超时时间
    proxy_connect_timeout 30;

    # 配置代理服务器HTTP状态缓存时间
    proxy_cache_valid 200 302 10m;
    proxy_cache_valid 301 1h;
    proxy_cache_valid any 1m;
  }
}

Client端 - 配置代理上网

设置http代理

修改配置

修改/etc/profile,增加以下内容:

http_proxy=http://[代理地址]:[代理地址的端口]/
https_proxy=http://[代理地址]:[代理地址的端口]/
export http_proxy https_proxy

永久生效代理

vim .bashrc
export http_proxy=http://192.168.1.9:8080
source  .bashrc

马上生效

source /etc/profile

取消代理

unset http_proxy

设置https代理

默认的情况下,使用nginx做正向代理可以解析http请求,
对于诸如baidu.com这样的https请求,nginx默认并不支持,不过我们可以借助第三方模块来实现。

安装nginx第三方模块

这里我们需要借助大神开发的【ngx_http_proxy_connect_module】

首先要确保你安装了patch,gcc、gcc++、pcre、zlib,这些都是我们用到的依赖软件或静态库

yum group install -y "Development Tools"
yum install -y patch pcre-devel pcre zlib-devel zlib

然后去github下载下来这个模块,就是直接去官网把整个目录下下来,解压放到你centos的某个目录下。
再下载nginx、按照官网说明执行以下命令

$ wget http://nginx.org/download/nginx-1.9.2.tar.gz
$ tar -xzvf nginx-1.9.2.tar.gz
$ cd nginx-1.9.2/
$ patch -p1 < /path/to/ngx_http_proxy_connect_module/proxy_connect.patch
$ ./configure --add-module=/path/to/ngx_http_proxy_connect_module
$ make && make install

注意其中的【/path/to/ngx_http_proxy_connect_module】,指的就是你从github上,下载的这个模块的存放路径。

完成后,/usr/local/nginx就是编译后的nginx的路径。

配置config

/usr/local/nginx/conf/nginx.conf
server {
    resolver 192.168.31.1;
    resolver_timeout 5s;
    listen       8889;
    proxy_connect;
    proxy_connect_allow            443 563;
    proxy_connect_connect_timeout  10s;
    proxy_connect_read_timeout     10s;
    proxy_connect_send_timeout     10s;

    location / {
      #proxy_pass $scheme://$host$request_uri;
      #proxy_set_header Host $http_host;

      proxy_pass http://$host;
      proxy_set_header Host $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;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

}

测试配置正确性

nginx -t

重启nginx并生效配置

nginx -s reload

参考资料

-centos使用nginx反向代理实现负载均衡
-CentOS7 通过代理上网
-nginx做正向代理(Centos7,支持http和https)