Nginx
Nginx是一个web服务器和反向代理服务器,可以用来做反向代理、负载均衡、虚拟主机(两个域名映射到同一台主机上面)
Docker 安装Nginx
docker pull nginx:latest
docker run --name myNginx -p 8080:80 -d nginx
查看配置文件
ps -ef | grep nginx # 程序在运行中
which nginx # 查看运行文件所在路径
whereis nginx # 查看软件安装路径
# 获得结果 /usr/sbin/nginx
/usr/sbin/nginx -t # 查看配置文件所在路径
代理
正向代理
正向代理,架设在客户机与目标主机之间,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器。 比如访问google学术,客户端是无法直接访问的,但是可以通过学校图书馆做代理服务器,客户端把请求发送到学校图书馆,然后图书馆作为代理服务器访问google学术,然后返回结果给客户端
反向代理
反向代理服务器架设在服务器端,通过缓存经常被请求的页面来缓解服务器的工作量,将客户机请求转发给内部网络上的目标服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器与目标主机一起对外表现为一个服务器。
反向代理的作用?
主要用于转发客户机请求,假设后台有多个http服务器提供服务,nginx的功能就是把请求转发给后面的服务器,决定哪台目标主机来处理当前请求。
Nginx 实现反向代理
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location / {
root /root/workspace/ruoyi-ui/dist/; # 设置前端页面的根目录
try_files $uri $uri/ /index.html;
index index.html index.htm; # 首页
}
# 设置转发路径,反向代理,
location /prod-api/{ # 如果路径里面包含/prod-api/,则请求到下面的转发路径,/prod-api/ 会被替换为proxy_pass ip:port后面的内容,这里没写,所以会被删除掉
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://172.16.0.13:8080/;# 转发到的路径
}
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
Nginx 实现负载均衡
负载均衡,: 轮询(按顺序执行)、公平(根据处理能力分发)、权重(权重越高的被分配的越多)、hash(根据ip的hash进行分配)
轮询
upstream backend{
server 172.16.0.129:8080 ;
server 172.16.0.130:8080 ;
}
公平
根据服务器的处理能力来进行分发
upstream backend{
server 172.16.0.129:8080 ;
server 172.16.0.130:8080 ;
fair;
}
权重
权重越高分发的概率越高
upstream backend{
server 172.16.0.129:8080 weight=5;
server 172.16.0.130:8080 weight=3;
}
hash
根据IP的哈希结果来分发。
upstream backend{
ip_hash;
server 172.16.0.129:8080 ;
server 172.16.0.130:8080 ;
}
完整DEMO
# 实现的负载均衡,: 轮询(按顺序执行)、公平(根据处理能力分发)、权重(权重越高的被分配的越多)、hash(根据ip的hash进行分配)
upstream backend{
server 172.16.0.129:8080 weight=5;
server 172.16.0.130:8080 weight=3;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
include /etc/nginx/default.d/*.conf;
location / {
root /root/workspace/ruoyi-ui/dist/; # 设置前端页面的根目录
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
# 设置转发路径,反向代理,
location /prod-api/{ # 如果路径里面包含/prod-api/ 则请求到下面的转发路径
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://backend/;# 转发到的路径
}
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
Nginx 实现动静分离
动静分离的目的是提高资源的访问效率,对于静态请求(css、html、image)请求静态资源服务器,对于动态请求请求后端服务器。
两种方案:
- 静态资源和动态资源属于不同的服务器
- 静态资源和动态资源放置在相同的服务器里面,通过nginx来分开,通过location 来指定不同的后缀名实现不同的请求转发,通过expires 参数设置浏览器缓存的过期时间,只适合不经常变动的资源
Nginx 实现缓存
缓存可以减少大量重复数据的读取,从而节省资源,提升网站的性能。缓存数据分为两部分(索引,数据):
- 存储数据的索引,存放在内存中;
- 存储缓存数据,存放在磁盘空间中;
http {
#设置Web缓存区名称为nginx,内存缓存空间大小为20MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为2GB。
proxy_cache_path /data/cache levels=1:2 keys_zone=nginx:20M max_size=2G inactive=1d;
#为缓存数据添加头部信息
add_header muzigan-Cache "$upstream_cache_status form $server_addr";
upstream backend{
server 172.16.0.129:8080 weight=5;
server 172.16.0.130:8080 weight=3;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location / {
root /root/workspace/ruoyi-ui/dist/; # 设置前端页面的根目录
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /prod-api/{
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://backend/;# 转发到的路径
#开启缓存,nginx为上面配置的缓存分区名称
proxy_cache nginx;
#缓存设置 对不同的HTTP状态码设置不同的缓存时间
proxy_cache_valid 200 301 302 2m;
}
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
Nginx 配置目录展示
location / {
root /data/www/file //指定实际目录绝对路径;
autoindex on; //开启目录浏览功能;
autoindex_exact_size off; //关闭详细文件大小统计,让文件大小显示MB,GB单位,默认为b;
autoindex_localtime on; //开启以服务器本地时区显示文件修改日期!
}
403 Forbidden的问题
- 查看配置文件里面 user 用户的权限
- 查看nginx根目录里面是否有index.html文件
Nginx 高可用性
配置Nginx 集群,主从架构