全栈开发之前、后端服务部署:Nginx源码安装,反向代理,静态资源服务,生产环境跨域,负载均衡

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 全栈开发之前、后端服务部署:Nginx源码安装,反向代理,静态资源服务,生产环境跨域,负载均衡

背景


有了前端、后端甚至有时候还有移动端(APP、小程序)、跨平台的客户端之后,经过技术与产品的日常撕逼,然后开发、测试人员哼哧哼哧的一顿操作后,项目需要打包、部署到一个人们可以访问到的服务器上,毕竟,我们的产出是要给人们(也可能是机器。。)提供服务的。常用的反向代理(问:什么是反向代理,什么是正向代理?)服务组件有: NginxTengineOpenResty ,其实,这些的核心基础都是 Nginx ,所以这里以 Nginx 为例来部署代理我们的前后端服务。eg:一个极简的部署一般像这样:

image.png

  • 前端打包:npm run build
  • 后端打包: mvn clean package -Dmaven.test.skip=true
  • Nginx反向代理,静态资源托管,生产环境跨域,负载均衡。


Note: 关于拉取代码、构建、发布、部署这一系列过程,分为自动模式与手动模式;可以通过一些CI/CD工具或服务完成自动化的流水线一键发布。本篇文章中就先采用手动模式,如果不了解手动模式的繁琐,就无法体会自动模式的效率。


源码安装Nginx


# 下载
[root@hadoop1 local]# wget http://nginx.org/download/nginx-1.20.1.tar.gz
# 解压
[root@hadoop1 local]# tar -xvf nginx-1.20.1.tar.gz
[root@hadoop1 local]# cd nginx-1.20.1
[root@hadoop1 nginx-1.20.1]# ./configure
[root@hadoop1 nginx-1.20.1]# make
[root@hadoop1 nginx-1.20.1]# make install
# 配置环境变量
[root@hadoop1 nginx-1.20.1]# nginx -V
-bash: nginx: 未找到命令
[root@hadoop1 nginx-1.20.1]# vi /etc/profile
export NGINX_HOME=/usr/local/nginx
export PATH=$PATH:$NGINX_HOME/sbin
[root@hadoop1 nginx-1.20.1]# source /etc/profile
[root@hadoop1 nginx-1.20.1]# nginx -V
nginx version: nginx/1.20.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
configure arguments:
# 启动
[root@hadoop1 nginx-1.20.1]# nginx -c /usr/local/nginx/conf/nginx.conf
# 配置开机自启Nginx服务
# 这里是用源码编译安装的,所以需要手动创建nginx.service服务文件。
[root@hadoop1 nginx-1.20.1]# vi /lib/systemd/system/nginx.service
[Unit]
Description=nginx service
After=network.target 
[Service] 
Type=forking 
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true 
[Install] 
WantedBy=multi-user.target
[root@hadoop1 nginx-1.20.1]# systemctl list-unit-files | grep nginx
nginx.service                                 disabled
[root@hadoop1 nginx-1.20.1]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@hadoop1 nginx-1.20.1]# systemctl list-unit-files | grep nginx
nginx.service                                 enabled 
# 常用命令
systemctl start nginx.service          启动nginx服务
systemctl stop nginx.service           停止服务
systemctl restart nginx.service        重新启动服务
systemctl status nginx.service          查看服务状态
systemctl enable nginx.service          设置开机自启动
systemctl disable nginx.service         取消开机自启动
# 查看开机启动项
systemctl list-unit-files
systemctl list-unit-files | grep enabled
systemctl list-unit-files | grep nginx

Nginx静态资源服务器

location / {
        root  /opt/reading-notes/frontend/dist;
        index  index.html index.htm;
    }


Nginx配置代理跨域


location /api  {
            include  uwsgi_params;
            rewrite  ^/api/(.*)$ /$1 break;
            proxy_pass   http://localhost:8000;
    }


开发环境使用Java11,生产环境使用Java8,报错:


解决方法,打包时使用 jdk1.8

<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-compiler-plugin</artifactId>
     <configuration>
         <source>1.8</source>
         <target>1.8</target>
         <encoding>UTF-8</encoding>
     </configuration>
 </plugin>


远程访问数据库


# 查看对当前用户的授权情况
show grants for 'root';
# 授权
GRANT DELETE, INSERT, SELECT, UPDATE ON `reading_notes`.* to root@'%' identified by 'root';
flush PRIVILEGES;
# 吊销
REVOKE DELETE, INSERT, SELECT, UPDATE ON `reading_notes`.* from root@'%';
flush PRIVILEGES;


Nginx负载均衡


  • 默认策略:轮询
upstream api-server {
        server 127.0.0.1:7000;
        server 127.0.0.1:8000;
    }
location /api  {
            include  uwsgi_params;
            rewrite  ^/api/(.*)$ /$1 break;
            proxy_pass   http://api-server;
    }
  • 修改策略:权重
upstream api-server {
        server 127.0.0.1:7000 weight=2;
        server 127.0.0.1:8000;
    }


确定请求的响应来自于哪台主机


add_header ServerIP $upstream_addr;

有了以上配置,可以在请求响应的头信息中看到 ServerIP 的信息。


Vue打包部署后,刷新页面404


try_files $uri $uri/ /index.html;


动态添加Nginx插件


HTTPS,HTTP2


前提


当然我们首先需要一台具有公网IP的服务器,甚至一个备案过的域名,关于服务器和域名的购买、备案,以及域名解析、SSL证书购买/申请等过程还是比较容易的,这里就跳过了。


小总结


通过以上步骤,我们有了前后端服务、部署到了服务器上,一个基本的Web2.0的网站就已经正常地跑起来了,可以为我们的客户提供服务啦。


下一步就是服务监控、弹性扩展、访问加速等一系列优化性的操作了,一些小屁网站可以没有这些运维相关的操作,但是对于稍微有点规模的系统,监控措施、扩展机制、持续优化是必备的。


反向代理、负载均衡,可能是成为系统架构师的第一步。因为这个时候,便会衍生出当今计算机领域的一个核心关键词:“集群”。这跟人们的日常工作生活非常类似,一个人的力量是有限的,而一群人的智慧是无穷的。每当我们的服务在一台主机上(或单个服务实例)的压力过大时,这时,另一个关键词涌现了:“扩展”或者“弹性伸缩”,提到“扩展”,我们一般还会分为“垂直扩展”、“水平扩展”,后续我将逐步介绍关于关系型数据库服务、文档型数据库服务、时序数据库服务、缓存服务、消息队列服务、定时任务服务、对象存储服务、搜索引擎服务、大数据各服务组件的弹性伸缩以及水平扩展能力。


最后,以《Hadoop权威指南-第4版》中的一句话作为本篇的结束:


在古时候,人们用牛来拉重物。当一头牛拉不动一根圆木时,人们从来没有考虑过要想方设法培育出一种更强壮的牛。同理,我们也不该想方设法打造出什么超级计算机,而应该千方百计综合利用更多计算机来解决问题。


相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
打赏
0
0
0
0
8
分享
相关文章
后端开发中的性能优化策略
本文将探讨几种常见的后端性能优化策略,包括代码层面的优化、数据库查询优化、缓存机制的应用以及负载均衡的实现。通过这些方法,开发者可以显著提升系统的响应速度和处理能力,从而提供更好的用户体验。
89 6
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
52 2
圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
本文介绍了圈子社交APP的源码获取、分析与定制,PHP实现的圈子框架设计及代码编写,以及圈子小程序的安装搭建。涵盖环境配置、数据库设计、前后端开发与接口对接等内容,确保平台的安全性、性能和功能完整性。通过详细指导,帮助开发者快速搭建稳定可靠的圈子社交平台。
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
164 3
后端开发中的微服务架构实践与挑战####
在数字化转型的浪潮中,微服务架构凭借其高度的灵活性和可扩展性,成为众多企业重构后端系统的首选方案。本文将深入探讨微服务的核心概念、设计原则、关键技术选型及在实际项目实施过程中面临的挑战与解决方案,旨在为开发者提供一套实用的微服务架构落地指南。我们将从理论框架出发,逐步深入至技术细节,最终通过案例分析,揭示如何在复杂业务场景下有效应用微服务,提升系统的整体性能与稳定性。 ####
58 1
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
150 3
解读 Nginx:构建高效反向代理和负载均衡的秘密
解读 Nginx:构建高效反向代理和负载均衡的秘密
160 2
nginx自定义负载均衡及根据cpu运行自定义负载均衡
nginx自定义负载均衡及根据cpu运行自定义负载均衡
146 1
SLB与NGINX的异同是什么
SLB与NGINX的异同是什么
689 2
解决nginx配置负载均衡时invalid host in upstream报错
在Windows环境下,配置Nginx 1.11.5进行负载均衡时遇到问题,服务无法启动。错误日志显示“invalid host in upstream”。检查发现上游服务器列表中,192.168.29.128的主机地址无效。负载均衡配置中,两个服务器地址前误加了&quot;http://&quot;。修正方法是删除上游服务器列表和proxy_pass中的&quot;http://&quot;。问题解决后,Nginx服务应能正常启动。
655 4
解决nginx配置负载均衡时invalid host in upstream报错