Nginx Https服务 + 反向代理+负载均衡

1、Nginx Https服务

为了实现前后端分离的部署,希望实现如下的调用:

比如: https://api.icheesedu.com/learn/search 提供接口给App端调用。

比如: https://www.icheesedu.com/iOS/RunLoop.html 实现h5项目的部署。

需要对Nginx进行如下的配置修改

upstream tomcat {
  server 127.0.0.1:8080;
}

server {
  listen 80;
  server_name  xxx.xxx.xxx.xxx  www.icheesedu.com;
}



server {

    listen       443 ssl;
    server_name  xxx.xxx.xxx.xxx www.icheesedu.com ;
    sendfile on;
    access_log /usr/local/nginx/logs/access.log combined;
    error_log  /usr/local/nginx/logs/error.log info;

    root /usr/local/nginx/html; 


    ssl_certificate   /developer/setup/nginx-1.10.2/ssl/NNSKKSS/xxx.xxx.xxx.xxx.pem;
    ssl_certificate_key  /developer/setup/nginx-1.10.2/ssl/NNSKKSS/xxx.xxx.xxx.xxx.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
    ssl_prefer_server_ciphers on;

    location / {
        root /usr/local/nginx/html; 
    }
}

server {

    listen       443 ssl;
    server_name  api.icheesedu.com ;
    sendfile on;
    access_log /usr/local/nginx/logs/access.log combined;
    error_log  /usr/local/nginx/logs/error.log info;

    root /usr/local/nginx/html;


    ssl_certificate   /developer/setup/nginx-1.10.2/ssl/NNDNNND/xxxxxxxxx.pem;
    ssl_certificate_key  /developer/setup/nginx-1.10.2/ssl/NNDNNND/xxxxxxxxx.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
    ssl_prefer_server_ciphers on;

    location / {
        root /usr/local/nginx/html;
        proxy_set_header  X-Forwarded-Host $host;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        expires off;
        sendfile off;
        proxy_pass http://tomcat;
   }
}

此时,重启nginx服务,访问上述网站即可。

至于如何申请二级域名证书:

Nginx Https服务 + 反向代理+负载均衡_第1张图片
Nginx Https服务 + 反向代理+负载均衡_第2张图片

2、Nginx反向代理服务

  • 当我们启动一个服务的时候,一般都是通过这样的方式访问
Nginx Https服务 + 反向代理+负载均衡_第3张图片
image.png

但是一般我们都是通过域名来访问的,我们想去掉端口号访问,但是会发现出现 404。怎么解决呢?

这个时候我们需要使用Nginx80端口实现请求转发,即所有的请求都通过Nginx,然后转发到 127.0.0.1:8080

Nginx Https服务 + 反向代理+负载均衡_第4张图片
image.png

访问效果如下:

Nginx Https服务 + 反向代理+负载均衡_第5张图片
image.png

这样我们就把端口号给去掉了。这个时候你会问,那么线上的话,该怎么处理呢?

我们只需要修改 server_name 即可。

Nginx Https服务 + 反向代理+负载均衡_第6张图片
image.png

效果如下

Nginx Https服务 + 反向代理+负载均衡_第7张图片
image.png

3、负载均衡

在实际场景中,用户数量非常多的情况下访问单一支付系统,会严重消耗服务器资源。此时我们需要采用多台服务器部署订单系统,减轻压力。这就叫做集群。随之而来的就是如何让集群中的每个实例能够均衡的接受访问。这就牵扯到了负载均衡。

配置集群之前,需要先配置反向代理。再去配置nginx负载均衡。

Nginx Https服务 + 反向代理+负载均衡_第8张图片
image.png

其中有IP绑定、权重、轮训机制、 负载均衡算法。具体可查资料。

4、日志切割

  • 编写Shell脚本splitLog.sh(记住为splitLog.sh添加可执行权限):
# /bin/bash
 
# 日志保存位置
base_path='/usr/local/nginx/logs'
# 获取当前年信息和月信息
log_path=$(date -d yesterday +"%Y%m")
# 获取昨天的日信息
day=$(date -d yesterday +"%d")
# 按年月创建文件夹
mkdir -p $base_path/$log_path
# 备份昨天的日志到当月的文件夹
mv $base_path/access.log $base_path/$log_path/access_$day.log
# 输出备份日志文件名
# echo $base_path/$log_path/access_$day.log
# 通过Nginx信号量控制重读日志
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
  • 添加Linux定时任务
crontab -e
# 每天0时1分进行日志分割(建议在02-04点之间,系统负载小)
01 00 * * * /opt/nginx/logs/splitLog.sh  
 
重启Linux定时任务
crond restart
 
如果提示以下错误
crond: can't lock /var/run/crond.pid, otherpid may be 4141: 资源暂时不可用
删除/var/run/crond.pid 重新执行命令即可

另外配置文件要遵循一定的规范

-rw-r--r-- 1 root root   1012 12月  5 10:48 api.conf
-rw------- 1 root root 113974 12月  3 19:33 nohup.out
-rw-r--r-- 1 root root    763 12月  5 10:48 web.conf

api.conf 主要提供API接口服务
web.conf 主要提供静态资源的服务

详情介绍:

更新主题详情

261天以来,Java架构更新了 646个主题,已经有120+位同学加入。微信扫码关注java架构,获取Java面试题和架构师相关题目和视频。上述相关面试题答案,尽在Java架构中。

你可能感兴趣的:(Nginx Https服务 + 反向代理+负载均衡)