课程内容
1. https安装认证
2. nginx反向代理
3. 负载均衡配置策略
1. https安装认证
1.1 https概述
为什么需要使用HTTPS,因为HTTP不安全,当我们使用http网站时,会遭到劫持和篡改,如果采用https协议,那么数据在传输过程中是加密的,所以黑客无法窃取或者篡改数据报文信息,同时也避免网站传输时信息泄露
>1. ssl证书获取(生产环境下不使用此方式生成证书,因为是不被互联网认可的黑户证书)
```
[root@localhost cert]# openssl genrsa -idea -out server.key 2048
Generating RSA private key, 2048 bit long modulus
..............................................................................................................................+++
.....+++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
```
>2.生成自签证书,同时去掉私钥的密码
```
[root@localhost cert]# openssl req -days 36500 -x509 \
> -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
Generating a 2048 bit RSA private key
.....................................................................................................................................................................................................................+++
.................................................................................................................+++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:China
string is too long, it needs to be less than 2 bytes long
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:CNINA
Locality Name (eg, city) [Default City]:changsha
Organization Name (eg, company) [Default Company Ltd]:yuelu
Organizational Unit Name (eg, section) []:changsah
Common Name (eg, your name or your server's hostname) []:luyue
Email Address []:1921702250@qq.com
```
>3. nginx的server配置
```
server
{
listen 443 ssl;
server_name www.ssl-blogs.com;
ssl_certificate /usr/local/nginx/cert/server.crt;
ssl_certificate_key /usr/local/nginx/cert/server.key;
location / {
root /wwwroot/blog;
index index.php index.html;
}
}
server
{
listen 80;
server_name www.ssl-blogs.com;
return 302 https://$server_name$request_uri;
}
```
2. nginx反向代理
2.1 反向代理概述
>什么是代理服务器
代理服务器,客户端在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户端请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘中,再发送给客户机。
>为什么要使用代理服务器 ?
```
1)提高访问速度
由于目标主机返回的数据会存放在代理服务器的硬盘中,因此下一次客户再访问相同的站点数据时,会直接从代理服务器的硬盘中读取,起到了缓存的作用,尤其对于热门站点能明显提高请求速度。
2)防火墙作用
由于所有的客户机请求都必须通过代理服务器访问远程站点,因此可在代理服务器上设限,过滤某些不安全信息。
3)通过代理服务器访问不能访问的目标站点
互联网上有许多开发的代理服务器,客户机在访问受限时,可通过不受限的代理服务器访问目标站点,通俗说,我们使用的翻墙浏览器就是利用了代理服务器,虽然不能出国,但也可直接访问外网。
```
>什么是反向代理?
反向代理服务器架设在服务器端,通过缓冲经常被请求的页面来缓解服务器的工作量,将客户端请求转发给内部网络上的目标服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器与目标主机一起对外表现为一个服务器。
>反向代理的作用?
现在许多大型web网站都用到反向代理。除了可以防止外网对内网服务器的恶性攻击、缓存以减少服务器的压力和访问安全控制之外,还可以进行负载均衡,将用户请求分配给多个服务器。
>配置nginx反向代理
```
upstream nginxserver1 {
server 192.168.63.101:80
}
upstream nginxserver2 {
server 192.168.63.102:80
}
server
{
listen 80;
server_name www.blog-proxy1.com;
root /wwwroot/blog;
index index.html index.php;
location ~ \.php$ {
proxy_pass http://nginxserver1
}
}
server
{
listen 80;
server_name www.blog-proxy2.com;
root /wwwroot/blog;
index index.html index.php;
location ~ \.php$ {
proxy_pass http://nginxserver2
}
}
```
3. 负载均衡配置策略
3.1 什么是负载均衡
网络负载均衡技术的大致原理是利用一定的分配策略将网络 负载平衡地分摊到网络集群的各个操作单元上,使得单个重负载任务能够分担到多个单元上并行处理,或者使得大量并发访问或数据流量分担到多个单元上分别处理,从而减少用户的等待响应时间。
在实际应用中,负载均衡会根据网络的不同层次进行划分。现代的负载均衡技术主要实现和作用于网络的第四层或第七层,完全独立于网络基础硬件设备,成为单独的技术设备。Nginx服务器实现的负载均衡一般认为是七层负载均衡。
负载均衡主要通过专门的硬件设备实现或者通过软件算法实现。通过硬件设备实现的负载均衡效果好、效率高、性能稳定,但是成本比较高。通过软件实现的负载均衡主要依赖于均衡算法的选择和程序的健壮性。均衡算法也是多种多样的,常见的有两大类:
* 静态负载均衡算法
* 动态负载均衡算法。
静态算法实现比较简单,在一般网络环境下也能达到比较好的效果,主要有一般轮询算法、基于比率的加权轮询算法以及基于优先级的加权轮询算法等。
动态负载均衡算法在较为复杂的网络环境中适应性更强,效果更好,主要有基于任务量的最少连接优先算法、基于性能的最快响应优先算法、预测算法及动态性能分配算法等。
3.2 nginx负载均衡策略-轮询规则
upstreamserver服务器组中所有服务器的优先级全部配置为默认的weight=1,这样它们会按照一般轮询策略依次接收请求任务。 该配置是一个最简单的实现Nginx服务器负载均衡的配置。所有访问www.blogs.com的请求都会在backend服务器组中实现负载均衡。实例代码如下:

```
upstream upstreamserver
{
server 192.168.63.101:80;
server 192.168.63.102:80;
}
server
{
listen 80;
server_name www.blogs.com;
root /wwwroot/blog;
index index.html index.php;
location ~ \.php$ {
proxy_pass http://upstreamserver;
}
}
```
3.2 nginx负载均衡策略-加权轮询
upstreamserver服务器组中的服务器被赋予了不同的优先级别,weight 变量的值就是轮询策略中的“权值”。其中,192.168.63.101:80 的级别最高,优先接收和处理客户端请求; 192.168.63.102:80 的级别最低,是接收和处理客户端请求最少的服务器。所有访问www.blogs.com的请求都会在upstreamserver服务器组中实现加权负载均衡。实例代码如下:
```
upstream upstreamserver
{
server 192.168.63.101:80 weight=2;
server 192.168.63.102:80;
}
server
{
listen 80;
server_name www.blogs.com;
root /wwwroot/blog;
index index.html index.php;
location ~ \.php$ {
proxy_pass http://upstreamserver;
}
}
```
3.3 nginx负载均衡策略-hash规则
nginx_test服务器组中配置了根据用户id进行hash散列分配服务器处理请求,假设访问的用户id为1,hash后的服务器为192.168.63.101:80,那么对于这个用户之后的请求都会是使用192.168.63.101:80进行处理。其他用户也是一样。

```
upstream nginx_test {
server 192.168.63.101:80;
server 192.168.63.103:80;
hash $uid;
}
server
{
listen 8080;
server_name 192.168.63.104;
if ( $request_uri ~* ^\/.*uid=(\d+).* ) {
set $uid $1;
}
location / {
proxy_pass http://nginx_test;
}
}
```
3.4 nginx负载均衡策略-热备
nginx_test服务器组中对于192.168.63.103:80配置了backup,那么192.168.63.103:80就不会参与请求的处理,当服务器192.168.63.101:80宕机,才会由192.168.63.103:80进行请求处理。
```
upstream nginx_test {
server 192.168.63.101:80;
server 192.168.63.103:80 backup;
}
server
{
listen 8080;
server_name 192.168.63.104;
location / {
proxy_pass http://nginx_test;
}
}
```
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!