nginx代理,负载均衡,配置SSL

nginx代理

通过配置文件设置,就可以将特定的链接向应用服务器转发。例如 Nginx 可通过以下简单的配置,即可实现代理转发: 例如:客户端想访问外网web服务器可以从中间搭建一个代理服务器进行转发;或者客户端和web服务比较远传输比较慢,可以中间搭建一个代理服务器节省时间

用户-----代理服务器----web服务器

实验:

A机器jinkai01 有内网地址IP:192.168.186.140,搭建了bbs.jinkai.cc论坛网站;

B机器jinkai03有内网地址IP:192.168.186.144,外网IP:192.168.230.128;

本机客户端hosts增加域名解析 192.168.230.128 bbs.jinkai.cc,因为本机无法通过A去解析域名,所以只有通过B代理连接到A就可以实现域名解析

B机器:

虚拟机新增一块网卡ens37,仅主机模式获取地址192.168.230.128;

新增的网卡是没有配置文件的,可以复制ens33生成一个ens37文件

cp /etc/sysconfig/network-scripts/ifcfg-ens33

/etc/sysconfig/network-scripts/ifcfg-ens37

更改配置文件网卡名问ens37,IP地址,网关和DNS可以删除不设置

安装nginx:

生成新的yum仓库nginx.repo,添加下面内容

vim /etc/yum.repos.d/nginx.repo

扫描二维码关注公众号,回复: 12420915 查看本文章

[nginx-stable]

name=nginx stable repo

baseurl=http://nginx.org/packages/centos/$releasever/$basearch/

gpgcheck=1

enabled=1

gpgkey=https://nginx.org/keys/nginx_signing.key

module_hotfixes=true

安装:yum install -y nginx

启动:systemctl start nginx

检查服务是否开启:ps aux | grep nginx

定义配置文件:

cd /etc/nginx/conf.d/

vim daili.conf

server {

  listen    80;

  server_name bbs.jinkai.cc; //域名填写需要web服务端的域名

location /

  {

​    proxy_pass http://192.168.186.140; //web服务端的地址

​    proxy_set_header Host $host;

​    proxy_set_header X-Real-IP $remote_addr;

​    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  }、

}

检查配置文件语法:nginx -t

重载:nginx -s reload

防火墙添加规则放行80端口:

firewall-cmd --add-port=80/tcp --permanent

firewall-cmd --reload

实验结果:电脑本机访问bbs.jinkai.cc成功

nginx负载均衡

负载均衡就是,把请求均衡地分发到后端的各个机器上面。

B机器代理服务器:

定义虚拟配置文件

cd /etc/nginx/conf.d/

vim fuzai.comf

upstream apelearn

  {

​    ip_hash;

​```
        server 115.159.51.96:80 weight=100; //weight 定义权重
​```

​    server 47.104.7.242:80;

  }

  server

  {

​    listen 80;

​    server_name www.apelearn.com;

​    location /

​    {

​      proxy_pass http://apelearn;

​      proxy_set_header Host $host;

​      proxy_set_header X-Real-IP $remote_addr;

​      proxy_set_header X-Forwarded-For 

$proxy_add_x_forwarded_for;

​    }

}

[root@jinkai03 conf.d]# nginx -t

[root@jinkai03 conf.d]# nginx -s reload

电脑本机hosts 设置 192.168.230.128 [www.apelearn.com

](http://www.apelearn.com)

Nginx配置ssl

ssl原理

http与https区别

http默认端口为80,https默认端口为443;
http传输数据为明文,https传输数据是加密的;

http是HTTP协议运行在TCP之上。所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份;
https是HTTP运行在SSL/TLS之上,SSL/TLS运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。此外客户端可以验证服务器端的身份,如果配置了客户端验证,服务器方也可以验证客户端的身份。

https工作流程

1.完成TCP三次同步握手
2.客户端验证服务器的证书,通过,进入步骤3
3.DH算法协商对称加密算法的秘钥、hash算法的秘钥
4.SSL安全加密碎到协商完成;
5.网页用加密方式传输,用协商的加密算法加密,保证数据完整和不被篡改;

生成ssl密钥对

正常的网站https使用的ssl证书是需要购买的,我们做实验就只需要自己生成一个就行了,但是无法在网络上流通;

下载openssl生成软件

yum install -y openssl

进入密钥对目录

设置秘钥存放目录

[root@jinkai03 ]# cd /etc/nginx

生成私钥

注意这里要求设置密码

[root@jinkai03 nginx]# openssl genrsa -des3 -out tmp.key 2048

转换为无密码的私钥

注意:这里会提示要求输入老私钥文件tmp.key的密码;

[root@jinkai03 nginx]# openssl rsa -in tmp.key -out jinkai.key

Enter pass phrase for tmp.key:

writing RSA key

删除老的私钥

[root@jinkai03 nginx]# rm -rf tmp.key

生成证书请求文件

需要设置详细信息,可以直接回车默认

[root@jinkai03 nginx]# openssl req -new -key jinkai.key -out jinkai.csr

设置公钥有效期,生成公钥

[root@jinkai03 nginx]# openssl x509 -req -days 365 -in jinkai.csr -signkey jinkai.key -out jinkai.crt

注意:jinkai.crt才是公钥,jinkai.csr只是请求文件,jinkai.key是私钥;

以上操作的最终目的是生成jinkai.key和jinkai.crt两个文件。其实购买的SSL证书主要是 得到这两个文件,有了这两个文件就可以配置Nginx

nginx配置SSL

创建ssl配置文件

vim /etc/nginx/conf.d/ssl.conf

代码

server

{

listen 443; //设置端口为443

server_name jinkai.com; //设置网站域名为shu.com

index index.html index.php;

root /data/wwwroot/jinkai.com; //设置web的站点目录

ssl on; //开启ssl功能

ssl_certificate jinkai.crt; //指定公钥名字

ssl_certificate_key jinkai.key; //指定私钥名字

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

}

检测与生效

nginx -t

nginx -s reload

错误:nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead in /etc/nginx/conf.d/ssl.conf:7

解决:把ssl on;删除 把443 改成443 ssl

测试

关闭原有的默认虚拟主机deny all;

防火墙放行443端口;

/etc/hosts添加域名解析

查看监听端口,有443则成功

netstat -lntp

使用https://jinkai.com访问,成功;

[root@jinkai03 ]# curl https://jinkai.com

curl: (60) Peer's certificate issuer has been marked as not trusted by the user.

More details here: http://curl.haxx.se/docs/sslcerts.html

猜你喜欢

转载自blog.51cto.com/11451960/2611318
今日推荐