如何部署反向代理服务器Nginx?

CDN技术

1 理论部分

1.1 Reverse Proxy概念

是指以代理服务器来接受internet上的请求,然后将请求转发给内部网络上的服务器,并将服务器上得到的结果返回给internet上的请求连接客户端。

1.2 Reverse Proxy的工作流程


1)客户端发出访问请求到Reverse Proxy服务器
2)Reverse Proxy服务器经过防火墙的特定通路,将请求转发到内容服务器
3)内容服务器将返回结果经过原通道返回给Reverse Proxy服务器
4)Reverse Proxy将检索到的信息发送给客户端。
注意:如果内容服务器返回错误消息,代理服务器会先行截取该消息并更改标头中列出的任何 URL,然后再将消息发送给客户机。如此可防止外部客户机获取内部内容服务器的重定向 URL。

1.3 Reverse Proxy的特征

1)Reverse Proxy对外表现为一台Web服务器而不需要特定的Web服务器配置
2)Reverse Proxy服务器不储存任何网页真实数据,所有的静态页面或者CGI程序,都存于内部Web服务器上。

1.4 Reverse Proxy的作用

1)增加服务器的安全性
2)提高服务的访问性能

1.5 Reverse Proxy的分类

1)普通反向代理
2)安全反向代理 – 使用安全套接字(SSL)协议加密

1.6 Reverse Proxy的应用场景

CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置反向代理节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

2 实验部分

2.1 基础环境

2.1.1 环境信息

服务器信息:
proxySer:
ip address=10.168.0.185
hostname=proxySer

webSer:
ip address=10.168.0.80
WEB服务请参阅如下环境配置:
https://www.cmdschool.org/archives/1

client:
ipaddress=10.168.0.8
hostname=client

2.1.2 关闭SELinux

setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

2.1.3 防火墙配置

1) CentOS 6

vim /etc/sysconfig/iptables

加入如下配置:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT

重启服务使配置生效:

/etc/init.d/iptables restart

2) CentOS 7

firewall-cmd --permanent --add-service http
firewall-cmd --permanent --add-service https
firewall-cmd --reload
firewall-cmd --list-all

2.2 nginx的安装和配置

In proxySer:

2.2.1 yum源的安装

1)CentOS 6

yum install -y http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

2)CetnOS 7

yum install -y http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

3)安装nginx的rpm包

yum -y install nginx

注:更新的版本请从以下链接中选择,
http://nginx.org/packages/

2.2.2 编辑配置文件

1)修改主配置文件

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.default
vim /etc/nginx/nginx.conf

添加内容如下:

http {
    [...]
    client_max_body_size 500m;
    [...]
}

2)检查包含如下语句:

grep include /etc/nginx/nginx.conf

显示如下:

include /etc/nginx/conf.d/*.conf;

配置缓存目录

mkdir -p /data/nginx/cache
chown nginx:nginx /data/nginx/cache/
chmod 770 /data/nginx/cache/

清理默认配置:

mkdir /etc/nginx/conf.d/backup
mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/backup

3)增加代理服务器http服务

vim /etc/nginx/conf.d/www.cmdschool.org_80.conf

输入如下配置:

proxy_cache_path /data/nginx/cache/one levels=2:2:2  keys_zone=one:10m
                 inactive=24h  max_size=1g;
server {
    listen 80;
    server_name www.cmdschool.org;

    location / {
        proxy_pass             http://10.168.0.80;
        proxy_set_header       Host $host;
        proxy_cache            one;
        proxy_cache_valid      200  1d;
        proxy_cache_use_stale  error timeout invalid_header updating
                                   http_500 http_502 http_503 http_504;
    }
}

4)增加代理服务器https服务

vim /etc/nginx/conf.d/www.cmdschool.org_443.conf

输入如下配置:

proxy_cache_path /data/nginx/cache/two levels=2:2:2  keys_zone=two:10m
                 inactive=24h  max_size=1g;
server {
    listen 443;
    server_name www.cmdschool.org;
    ssl on;
    ssl_certificate 1_www.cmdschool.org_bundle.crt;
    ssl_certificate_key 2_www.cmdschool.org.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass             http://10.168.0.80;
        proxy_set_header       Host $host;
        proxy_cache            two;
        proxy_cache_valid      200  1d;
        proxy_cache_use_stale  error timeout invalid_header updating
                                   http_500 http_502 http_503 http_504;
    }
}

2.2.3 启动nginx服务并设置开机自启动

1) CentOS 6

/etc/init.d/nginx start
chkconfig nginx on

2) CentOS 7

systemctl start nginx.service
systemctl enable nginx.service

2.2.4 检查名称解析

In client:
通过以下命令测试域名是否能够正常解析,

ping www.cmdschool.org

或者,测试环境你可以使用host代替DNS的名称解析,

echo '10.168.0.185 www.cmdschool.org' >> /etc/hosts

2.2.6 nginx反向代理测试

In client:

curl http://www.cmdschool.org
curl https://www.cmdschool.org

参阅资料:
———————————————————-
理论部分参阅资料:
1)官方:
http://www.nginx.org
https://www.nginx.com/resources/admin-guide/reverse-proxy/

2)Tengine:
http://tengine.taobao.org

实验部分参阅资料:
1)Nginx官方下载路径:
http://nginx.org/en/download.html
2)多端口监听的配置:
http://linder.iteye.com/blog/782071

没有评论

发表回复

Nginx
如何解决https请求不安全http页被阻止问题?

1 前言 一个问题,一篇文章,一出故事。 笔者最近代理公司应用,发现https的页面有请求不安全的h …

Reverse Proxy
如何解决Nginx代理丢失Cookies问题?

1 前言 一个问题,一篇文章,一出故事。 笔者接到任务需要把Tomcat的其中一个应用号使用Ngin …

Nginx
如何Nginx代理上游的子项目或文件夹?

1 前言 一个问题,一篇文章,一出故事。 笔者接到任务需要把Tomcat的其中一个应用号使用Ngin …