Nginx代理

Nginx代理功能非常实用,如果一个没有公网IP的服务器要提供Web服务-->通过代理实现。

LNMP(4)Nginx代理、Nginx负载均衡、ssl原理、生产ssl密钥对、Nginx配置ssl_第1张图片

配置nginx代理:

1.创建代理配置文件:

cd  /usr/local/nginx/conf/vhost

vim proxy.conf  (proxy.conf是代理配置文件)

添加内容:


server

{

    listen 80;

    server_name ask.apelearn.com;  //定义访问域名


    location /

    {

        proxy_pass      http://47.91.145.78/;    //proxy_pass 指定要代理的域名所在的服务器ip, http://121.201.9.155/就是ask.apelearn.com 所在服务器的ip

        proxy_set_header Host   $host;             //要访问的域名,$host相当于server_name

        proxy_set_header X-Real-IP      $remote_addr;  //$remote_addr访问网站的用户的出口IP

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;//代理服务器的Ip   (最后两行可省略)

    }

}

LNMP(4)Nginx代理、Nginx负载均衡、ssl原理、生产ssl密钥对、Nginx配置ssl_第2张图片


修改完配置文件后:

(1)测试配置文件是否正确:

 /usr/local/nginx/sbin/nginx -t

(2)加载一下配置文件:

 /usr/local/nginx/sbin/nginx -s reload



测试:

LNMP(4)Nginx代理、Nginx负载均衡、ssl原理、生产ssl密钥对、Nginx配置ssl_第3张图片

curl -x192.168.136.133:80 ask.apelearn.com/robots.txt


LNMP(4)Nginx代理、Nginx负载均衡、ssl原理、生产ssl密钥对、Nginx配置ssl_第4张图片


(查看域名对应的ip: dig+域名

  无 dig命令工具,则安装:yum   install   -y   bind*  /yum install -y bind-utils


                     Nginx负载均衡

(当我们的代理服务器后面是很多web服务器的时候,那么就需要负载均衡)

演示对象:qq.com

查看www.qq.com 域名的解析ip

dig www.qq.com (dig可以查看到其域名对应的所有ip。而ping只能看到一个)

LNMP(4)Nginx代理、Nginx负载均衡、ssl原理、生产ssl密钥对、Nginx配置ssl_第5张图片


设置负载均衡的步骤:

1.创建一个负载均衡配置文件:

cd /usr/local/nginx/conf/vhost

vim ld.conf  

upstream qq

{

    ip_hash;  //这里下面可以定义多个Ip; 这里设置是能让用户始终访问在一台服务器。ip_hash为负载均衡的算法,表示根据IP地址请求分到不同 的服务器上。

    server 14.17.42.40:80;

    server 14.17.32.211:80;

    server  59.37.96.63:80;

}

server

{

    listen 80;

    server_name www.qq.com;   //servername后面能跟ip

    location /

    {

        proxy_pass      http://qq;   //这里的名字要和upstream 处定义的一致

        proxy_set_header Host   $host;

        proxy_set_header X-Real-IP      $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    }

}

LNMP(4)Nginx代理、Nginx负载均衡、ssl原理、生产ssl密钥对、Nginx配置ssl_第6张图片



修改完配置文件后:

(1)测试配置文件是否正确:

 /usr/local/nginx/sbin/nginx -t

(2)加载一下配置文件:

 /usr/local/nginx/sbin/nginx -s reload


测试:

curl -x127.0.0.1:80 www.qq.com

curl -x192.168.136.133:80 www.qq.com

此时我们就可以访问到www.qq.com首页的内容

LNMP(4)Nginx代理、Nginx负载均衡、ssl原理、生产ssl密钥对、Nginx配置ssl_第7张图片

(curl -x127.0.0.1:80 www.qq.com -I 则报502错误

 LNMP(4)Nginx代理、Nginx负载均衡、ssl原理、生产ssl密钥对、Nginx配置ssl_第8张图片


Nginx 不支持代理https  即

blob.png这里server处不能写ip:43



              ssl原理

使用https 通信时,我们在访问web服务器时,返回的数据包进行加密,从而保证数据安全。

https的通信过程:

LNMP(4)Nginx代理、Nginx负载均衡、ssl原理、生产ssl密钥对、Nginx配置ssl_第9张图片

(SSL就是那个服务器的证书,就是访问流程第二步服务器的公钥和私钥)


                    生产ssl密钥对


(这个自定义的ssl密钥对只能在本机上使用,不能用作在生产环境中)

LNMP(4)Nginx代理、Nginx负载均衡、ssl原理、生产ssl密钥对、Nginx配置ssl_第10张图片

步骤:

1.存放路径: cd /usr/local/nginx/conf/

2.生成key文件为私钥

openssl genrsa -des3 -out tmp.key 2048//生成key文件为私钥(genrsa表示生成rsa格式的私钥,tmp.key为生产文件的名字 ,长度2048

(安装 openssl (rpm -qf `which openssl `查看该命令是需要那个包) yum install  -y openssl)

LNMP(4)Nginx代理、Nginx负载均衡、ssl原理、生产ssl密钥对、Nginx配置ssl_第11张图片

3./转换key,取消密码

openssl rsa -in tmp.key -out canshenglinux.key //转换key,取消密码 

blob.png

(此时生成的canshenglinux.key和tmp.key是同样的,canshenglinux.key无密码而已)


4.删除有密码的tmp.key

blob.png

rm -f tmp.key

5.生成证书请求文件canshenglinux.csr

 openssl req -new -key canshenglinux.key -out canshenglinux.csr//生成证书请求文件,需要拿这个文件和私钥一起生产公钥文件

执行命令后需要我们定义一系列的内容(自定义即可,也可以不写)

(但是我们是购买的ssl证书,则这个内容需要按购买方案的写入)


LNMP(4)Nginx代理、Nginx负载均衡、ssl原理、生产ssl密钥对、Nginx配置ssl_第12张图片


6.生产公钥文件:canshenglinux.crt

openssl x509 -req -days 365 -in canshenglinux.csr -signkey canshenglinux.key -out canshenglinux.crt

blob.png

(查看生成的文件)

blob.png


                Nginx配置ssl

LNMP(4)Nginx代理、Nginx负载均衡、ssl原理、生产ssl密钥对、Nginx配置ssl_第13张图片

1.生成一个配置文件:

 vim /usr/local/nginx/conf/vhost/ssl.conf

添加内容

server

{

    listen 443;

    server_name cansheng.com;  //服务域名

    index index.html index.php;

    root /data/wwwroot/cansheng.com;///服务域名路径

    ssl on;

    ssl_certificate canshenglinux.crt;  //公钥

    ssl_certificate_key canshenglinux.key;//私钥

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; //定义三个协议

}

LNMP(4)Nginx代理、Nginx负载均衡、ssl原理、生产ssl密钥对、Nginx配置ssl_第14张图片

创建文件:mkdir /data/wwwroot/cansheng.com

cd  /data/wwwroot/cansheng.com

vim index.html (新增一个测试文件)

blob.png


查看配置文件是否有错

 /usr/local/nginx/sbin/nginx -t

blob.png

此时有报错,原因是我们在编译Nginx的时候没有配置SSL参数

所以 在使用nginx时最好在编译的时候把ssl参数配置上再编译

blob.png


重新编译:

查看我们是需要添加ssl的哪个模块:./configure --help |grep -i ssl

LNMP(4)Nginx代理、Nginx负载均衡、ssl原理、生产ssl密钥对、Nginx配置ssl_第15张图片


编译:

1../configure --prefix=/usr/local/nginx --with-http_ssl_module

2.make

(echo $?)

3.make install 

(echo $?)


查看加载的模块

 /usr/local/nginx/sbin/nginx -V

LNMP(4)Nginx代理、Nginx负载均衡、ssl原理、生产ssl密钥对、Nginx配置ssl_第16张图片


再次检查配置文件是否有误:

 /usr/local/nginx/sbin/nginx -t

blob.png


4.重庆nginx服务:

/etc/init.d/nginx restart


查看监听端口是否多了一个443

LNMP(4)Nginx代理、Nginx负载均衡、ssl原理、生产ssl密钥对、Nginx配置ssl_第17张图片



测试:

curl -x192.168.136.133:443 https://cansheng.com

使用这种方法测试时不能访问:

blob.png

修改配置文件后可直接访问(不需要加ip:端口)

LNMP(4)Nginx代理、Nginx负载均衡、ssl原理、生产ssl密钥对、Nginx配置ssl_第18张图片

再访问:curl  https://cansheng.com

LNMP(4)Nginx代理、Nginx负载均衡、ssl原理、生产ssl密钥对、Nginx配置ssl_第19张图片

这个时候提示我们的ssl不被信任,但是其实测试已成功。因为我们的ssl证书是自己写的,不合法被服务器web识别。


window浏览器测试:

在hosts文件中增添访问指向域名:c:\windows\system32\drivers\etc


blob.png

然后浏览器地址栏 :https://cansheng.com

(如果访问不到-->查看防火墙(iptables -nvL)有规则的话,

 方法一:清空规则:iptable -F

 方法二:添加443端口规则

)

LNMP(4)Nginx代理、Nginx负载均衡、ssl原理、生产ssl密钥对、Nginx配置ssl_第20张图片访问成功


(沃通可以买到合法的ssl证书)