Nginx代理
Nginx代理功能非常实用,如果一个没有公网IP的服务器要提供Web服务-->通过代理实现。
配置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 (最后两行可省略)
}
}
修改完配置文件后:
(1)测试配置文件是否正确:
/usr/local/nginx/sbin/nginx -t
(2)加载一下配置文件:
/usr/local/nginx/sbin/nginx -s reload
测试:
curl -x192.168.136.133:80 ask.apelearn.com/robots.txt
(查看域名对应的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只能看到一个)
设置负载均衡的步骤:
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;
}
}
修改完配置文件后:
(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首页的内容
(curl -x127.0.0.1:80 www.qq.com -I 则报502错误
)
Nginx 不支持代理https 即
ssl原理
使用https 通信时,我们在访问web服务器时,返回的数据包进行加密,从而保证数据安全。
https的通信过程:
(SSL就是那个服务器的证书,就是访问流程第二步服务器的公钥和私钥)
生产ssl密钥对
(这个自定义的ssl密钥对只能在本机上使用,不能用作在生产环境中)
步骤:
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)
3./转换key,取消密码
openssl rsa -in tmp.key -out canshenglinux.key //转换key,取消密码
(此时生成的canshenglinux.key和tmp.key是同样的,canshenglinux.key无密码而已)
4.删除有密码的tmp.key
rm -f tmp.key
5.生成证书请求文件canshenglinux.csr
openssl req -new -key canshenglinux.key -out canshenglinux.csr//生成证书请求文件,需要拿这个文件和私钥一起生产公钥文件
执行命令后需要我们定义一系列的内容(自定义即可,也可以不写)
(但是我们是购买的ssl证书,则这个内容需要按购买方案的写入)
6.生产公钥文件:canshenglinux.crt
openssl x509 -req -days 365 -in canshenglinux.csr -signkey canshenglinux.key -out canshenglinux.crt
(查看生成的文件)
Nginx配置ssl
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; //定义三个协议
}
创建文件:mkdir /data/wwwroot/cansheng.com
cd /data/wwwroot/cansheng.com
vim index.html (新增一个测试文件)
查看配置文件是否有错
/usr/local/nginx/sbin/nginx -t
此时有报错,原因是我们在编译Nginx的时候没有配置SSL参数
所以 在使用nginx时最好在编译的时候把ssl参数配置上再编译
重新编译:
查看我们是需要添加ssl的哪个模块:./configure --help |grep -i ssl
编译:
1../configure --prefix=/usr/local/nginx --with-http_ssl_module
2.make
(echo $?)
3.make install
(echo $?)
查看加载的模块
/usr/local/nginx/sbin/nginx -V
再次检查配置文件是否有误:
/usr/local/nginx/sbin/nginx -t
4.重庆nginx服务:
/etc/init.d/nginx restart
查看监听端口是否多了一个443
测试:
curl -x192.168.136.133:443 https://cansheng.com
使用这种方法测试时不能访问:
修改配置文件后可直接访问(不需要加ip:端口)
再访问:curl https://cansheng.com
这个时候提示我们的ssl不被信任,但是其实测试已成功。因为我们的ssl证书是自己写的,不合法被服务器web识别。
window浏览器测试:
在hosts文件中增添访问指向域名:c:\windows\system32\drivers\etc
然后浏览器地址栏 :https://cansheng.com
(如果访问不到-->查看防火墙(iptables -nvL)有规则的话,
方法一:清空规则:iptable -F
方法二:添加443端口规则
)
(沃通可以买到合法的ssl证书)