Nginx网关搭建
那么什么是Nginx呢?
nginx是一个高性能HTTP服务器,反向代理服务器,邮件代理服务器,TCP/UDP反向代理服务器。
单个系统主要用于处理客户端请求,一个系统处理客户端的请求量是有限的,当客户端的并发量超过了系统的处理能力的时候,就会导致服务器性能降低,速度变慢,直接影响用户体验,所以为了提升性能,我们会创建多个服务实例,形成集群系统用于保证高可用。
也有部分业务场景,需要暴露给第三方,所以我们需要暴露出部分接口给第三方,这个时候我们就可以利用Nginx的反向代理,来代理我们的后端服务器。用户访问我们的Nginx网关,然后Nginx再转发给我们后端的业务模块。
详解图如下:
nginx配置
前提是咱们的Linux上已经安装过了Nginx,这边就不演示下载过程了。
http{
server {
#SSL 默认访问端口号为 443
listen 80;
listen 443 ssl;
#请填写绑定证书的域名
server_name comicomi.cloud;
#请填写证书文件的相对路径或绝对路径
ssl_certificate /etc/nginx/cert/comicomi.cloud_bundle.crt;
#请填写私钥文件的相对路径或绝对路径
ssl_certificate_key /etc/nginx/cert/comicomi.cloud.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1 TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location /api/ {
proxy_pass https://173.21.0.7:9938/;
proxy_next_upstream error timeout invalid_header http_500 http_503;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
#proxy_send_lowat 12000;
proxy_buffer_size 128k;
proxy_buffers 8 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
}
}
server{
listen 80;
server_name comicomi.cloud;
rewrite ^/(.*)$ https://comicomi.cloud:443/$1 permanent;
这里有一些解读:
location /api/ {
proxy_pass https://173.21.0.7:9938/;
}
我们会调用api的接口,都会转发到 https://173.21.0.7:9938/ 这个项目对应的模块上
即:https://comicomi.cloud/api/user/register,会转为 https://173.21.0.7:9938/user/register
第二点就是,在路径 proxy_pass 后的 https://173.21.0.7:9938/; 可以看到,有一个反斜杠 / ,这个反斜杠 / 万万不能漏掉。那么加上和不加上这个反斜杠 又有什么区别呢?
加上反斜杠/ 后,是相对路径,不会匹配前面的 api,例如
即:https://comicomi.cloud/api/user/register,会转为 https://173.21.0.7:9938/user/register
但如果加上反斜杠 / ,就会是绝对路径,例如 即:https://comicomi.cloud/api/user/register,会转为 https://173.21.0.7:9938/api/user/register
还有就是再这里加入了Nginx的SSL验证,对其进行了加密操作。
这里大家可以去掉,也可以利用阿里云或者腾讯云免费的SSL证书来开启Nginx的安全验证。
测试: