1.基本概念
- 正向代理
在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问
- 反向代理
我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器收获数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实的服务器IP地址
- 负载均衡
早期的架构模式大多是,客户端发送多个请求到服务器,服务器与数据库交互,处理完之后,再返回给客户端,这种模式简单成本低,适合并发量小的情况下搭建,但是随着用户规模越来越大,并发量也迅速提升,显然单纯的增加硬件解决不了根本问题,这时我们就要使用nginx负载均衡策略
- 动静分离
动静分离是指在web服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提升整个服务访问性能和可维护性
2.常用命令
- 查看版本号
nginx -v
- 启动nginx
nginx
- 查看nginx进程
ps -ef | grep nginx
- 停止nginx
nginx -s stop
- 重新加载nginx
nginx -s reload
3.配置文件介绍
cd /etc/nginx
vi nginx.conf
nginx.conf文件主要有这几大模块
- 全局块
从配置文件开始到events之间的内容,主要设置一些影响nginx整体运行的配置指令,比如
worker_processes 1
就是用来配置服务器所能支持的并发数,但是也会受硬件与软件的制约 - events块
events块主要影响nginx与用户的网络链接,比如worker_connection 1024
代表支持的最大连接数 - http块
这部分是主要的配置模块,包括负载均衡,反向代理等功能都是在这里面配置的,同时http块又包括http全局块,server块
4.实际部署
反向代理Demo
实现效果:打开浏览器,在浏览栏地址输入
www.123.com
,跳转到linux的tomcat主页面中具体实现:
1.在linux系统下安装tomcat,并且监听8080端口(假设你已经下好tomcat安装包)
cd /apache-tomcat-x.xx/bin && ./startup.sh
2.设置对外开放访问的端口,重新加载防火墙,这一篇博客可以参考(感谢这位博主)
ubuntu配置防火墙端口访问3.配置反向代理
以后访问www.123.com这个网址时,nginx就会自动将这个请求打到tomcat服务器上,但是我们还要在主机host文件中配置这个网址的ip映射(因为我们在浏览器输入一个域名,会先去本地Host查看是否有这个域名,然后再去网上的dns解析器找)
4.在host文件中配置
在最后加上你的主机域名 www.123.com
再访问
5.我们接下来去nginx.conf进行修改
server{
listen 80; #nginx监听80端口
server_name www.123.com; #入口地址
location / {
root html;
proxy_pass http://127.0.0.1:8080; #转发路径
index index.html index.htm;
}
}这样我们再访问www.123.com时,浏览器地址就调到了localhost:8080上
动静分离Demo
我们将静态资源单独放在磁盘的一个目录下,而非tomcat里,假设我们将其放在
/home/ubuntu/img/
下
打开springboot项目下的application.properties
文件,首先配置静态资源路径,我们遵循Restful风格命名,以后在nginx服务器上查看静态资源就是这个地址加上文件名
prop.avatarUrl = http://175.24.67.250/image/avatar/
接下来我们再去拦截器中注册拦截静态资源的路径
package com.neteasecommunity.james.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
//配置静态资源服务器路径
@Configuration
public class MyWebMvcConfig implements WebMvcConfigurer {
@Value("${web.upload-path}")
private String UPLOAD_FOLDER;
@Override
//配置用户头像静态资源
public void addResourceHandlers(ResourceHandlerRegistry registry){
registry.addResourceHandler("/img/avatar/**").addResourceLocations("file:"+"/home/ubuntu/img/avatar/");
}
}
接下来打开nginx配置文件
su root #注意要用root登录
cd /etc/nginx/
vi nginx.conf
在server里面配置一个location,用于代理静态资源路径
location /image/{
alias /home/ubuntu/img/;
}
alias相当于给/image/路径取了别名,比如说,我们访问 http://175.24.67.250/image/avatar/mm.jpg
这个图片,那么服务器默认给我们显示的就是磁盘路径为/home/ubuntu/img/avatar/
下mm.jpg这张图片,保存完配置后,我们输入地址http://175.24.67.250/image/avatar/mm.jpg
其实呢,这个文件已经在/home/ubuntu/img/avatar/
下了
这就是使用动静分离的好处:缓解主服务器压力,便于项目维护
负载均衡demo
还是进入nginx.conf,我是进行了如下配置
upstream cluster{
#配置上游服务器,使用轮训法,部署三台tomcat依次接受80端口发送过来的请求
server 175.24.67.250:8080;
server 175.24.67.250:8081;
server 175.24.67.250:8082;
}
server{
listen 80;
server_name 175.24.67.250;
#项目页面根地址
location / {
root /home/ubuntu/gitHome/musicBox/dist;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
#静态资源地址
location /image/{
alias /home/ubuntu/img/;
}
#后端地址
location ~ /api {
proxy_pass http://cluster; #记得加上上游请求地址
proxy_set_header HOST $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
2020.4.19 (补充)
nginx的user字段要记得加上当前启动服务器的用户