Nginx的应用场景
http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
什么是代理
nginx的正向代理,只能代理http、tcp等,不能代理https请求。有很多人不是很理解具体什么是nginx的正向代理、什么是反向代理。下面结合自己的使用做的一个简介:
正向代理
所谓正向代理就是内网服务器主动要去请求外网的地址或服务,所进行的一种行为。内网服务---访问--->外网
反向代理
所谓反向代理就是外网要访问内网服务而进行的一种行为。 外网----请求--->内网服务
安装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的某个目录下。
我这里留了个百度网盘的备份: 链接: https://pan.baidu.com/s/1m27jg9E71kpx_zHqmTK9kQ 密码: ccj8
再下载nginx、按照官网说明执行以下命令
$ wget http://nginx.org/download/nginx-1.16.1.tar.gz
$ tar zxvf nginx-1.16.1.tar.gz
$ cd nginx-1.16.1/
#下面这一步
$ patch -p1 < ../ngx_http_proxy_connect_module-0.0.1/patch/proxy_connect_rewrite_101504.patch
$ ./configure --prefix=/etc/nginx --user=www --group=www --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --modules-path=/usr/share/nginx/modules --error-log-path=/data/logs/nginx/error.log --http-log-path=/data/logs/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/lock/subsys/nginx --http-client-body-temp-path=/var/cache/nginx/client_body_temp/ --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp/ --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp/ --http-scgi-temp-path=/var/cache/nginx/scgi_temp/ --http-proxy-temp-path=/var/cache/nginx/proxy_temp/ --with-compat --with-threads --with-file-aio --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_sub_module --with-http_random_index_module --with-http_slice_module --with-http_degradation_module --with-http_stub_status_module --with-http_addition_module --with-http_auth_request_module --with-http_secure_link_module --with-stream --with-stream_realip_module --with-stream_ssl_preread_module --with-mail --with-mail_ssl_module --with-pcre --with-pcre-jit --add-module=../ngx_http_proxy_connect_module-0.0.1
$ make && make install
【../ngx_http_proxy_connect_module-0.0.1/patch/proxy_connect_rewrite_101504.patch】,指的就是你从github上下载的这个模块的存放路径。
- 选择正确的补丁进行构建:
nginx version | enable REWRITE phase | patch |
---|---|---|
1.4.x ~ 1.12.x | NO | proxy_connect.patch |
1.4.x ~ 1.12.x | YES | proxy_connect_rewrite.patch |
1.13.x ~ 1.14.x | NO | proxy_connect_1014.patch |
1.13.x ~ 1.14.x | YES | proxy_connect_rewrite_1014.patch |
1.15.2 | YES | proxy_connect_rewrite_1015.patch |
1.15.4 ~ 1.16.x | YES | proxy_connect_rewrite_101504.patch |
1.17.x ~ 1.18.0 | YES | proxy_connect_rewrite_1018.patch |
OpenResty version | enable REWRITE phase | patch |
---|---|---|
1.13.6 | NO | proxy_connect_1014.patch |
1.13.6 | YES | proxy_connect_rewrite_1014.patch |
1.15.8 | YES | proxy_connect_rewrite_101504.patch |
1.17.8 | YES | proxy_connect_rewrite_1018.patch |
Server端 - 配置正向代理
设置http代理
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;
}}
设置https代理
默认的情况下,使用nginx做正向代理可以解析http请求,
对于诸如baidu.com这样的https请求,nginx默认并不支持,不过我们可以借助第三方模块来实现。
server {
resolver 114.114.114.114;
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
Client端 - 配置代理上网Centos7网络代理配置
一、设置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
二、yum代理设置
1.打开yum.conf文件
vi /etc/yum.conf
2.添加Proxy代理信息
proxy = http://username:password@proxy_ip:port/
三、wget代理设置
1.打开/wgetrc文件
vi /etc/wgetrc
2.修改Proxy代理信息
http_proxy=http://username:password@proxy_ip:port/
ftp_proxy=http://username:password@proxy_ip:port/
linux下如出现 Received HTTP code 407 from proxy after CONNECT 这种错误提示,请去掉代理的密码
参考资料-centos使用nginx反向代理实现负载均衡
-CentOS7 通过代理上网
-nginx做正向代理(Centos7,支持http和https)