Nginx项目部署
Nginx介绍
Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,它也是一种轻量级的Web服务器,可以作为独立的服务器部署网站(类似Tomcat)。它高性能和低消耗内存的结构受到很多大公司青睐。
-
下载nginx
nginx 下载地址:nginx.org/en/download… 下载后直接解压,cmd 进入到解压目录运行 start nginx 即可启动
-
控制台(CMD)切换到Nginx目录下,输入start nginx ,然后在浏览器页面输入localhost,出现如下界面则表示安装成功。默认监听80端口号。
-
常用的命令
(1)start nginx 开启nginx服务
(2)nginx.exe -s stop 关闭nginx服务,快速停止nginx,可能并不保存相关信息
(3)nginx.exe -s quit 关闭nginx服务,完整有序的停止nginx,并保存相关信息
(4) nginx.exe -s reload 重载nginx服务,当你改变了nginx配置信息并需要重新载入这些配置时可以使用此命令重载nginx
-
打包项目
npm run build -
将dist文件夹里面的内容拷贝到nginx里面html文件夹
-
启动nginx访问http://127.0.0.1就可以默认访问到登录页面
-
nginx.conf文件配置
配置反向代理
location /apis/ { rewrite ^.+apis/?(.*)$ /$1 break; proxy_pass http://127.0.0.1:3000; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }rewrite就是将请求地址中的apis默认替换为/
proxy_pass配置代理的路径,也就说后端项目的路径
proxy_redirect配置代理重定向
proxy_set_header用来重定义发往后端服务器的请求头
-
请求404的问题
我们在使用路由的时候,默认配置的是history模式。这可能导致你在页面刷新会出现404,在vue-route里面给我已经写好了配置
找到nginx配置
location / { try_files $uri $uri/ /index.html; }将这项配置加入到nginx中
location / { root html; index index.html index.htm; try_files $uri $uri/ /index.html; }
React项目打包部署
-
执行打包命令
npm run build -
将dist文件夹下面的内容放在nginx配置html文件夹下面
-
打开nginx.conf文件,配置一下信息
location / { root html; index index.html index.htm; # 解决路由跳转问题 try_files $uri /index.html; }其中为了解决BrowerRouter页面刷新404的问题,我们需要加上
# 解决路由跳转问题 try_files $uri /index.html; -
配置反向代理
# 在nginx里面配置代理,通过nginx来代理发送请求访问 后端服务器 location /apis/ { rewrite ^.+apis/?(.*)$ /$1 break; proxy_pass http://127.0.0.1:4000; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }当然我们需要注意的是所有的请求都必须以apis开头,这样才能检测到请求类型
开启gzip配置
GZIP是若干文件压缩程序的简称,HTTP1.1协议定义的两种压缩方法中最常用的一种压缩方法,客户端浏览器大都支持这种压缩格式。
在不设置gzip情况下,我们访问服务器资源,返回的大小比如是10M
开启了gzip过后,返回的数据资源只有2M,一般来说压缩之后的数据量大概是原始数据的1/4,
gzip on;
gzip_min_length 1k;
#gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
gzip_comp_level 4;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip on|off:开启或者关闭gzip模块gzip_static on|off:nginx对于静态文件的处理模块,该模块可以读取预先压缩的gz文件,这样可以减少每次请求进行gzip压缩的CPU资源消耗gzip_min_length:默认值: 0 ,不管页面多大都压缩,设置允许压缩的页面最小字节数,建议设置成大于1k的字节数,小于1k可能会越压越大。 即: gzip_min_length 1024gzip_comp_level:等级1-9 9最小的压缩,传输最快 但是消耗cpugzip_buffers:设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流, 例如 4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存。gzip_http_version:http的版本gzip_types: gzip_types text/html (默认不对js/css文件进行压缩)压缩类型,匹配MIME类型进行压缩
缓存设置
在路由组件里面,我们点击路由切花,每次都会重新发一次请求给服务器,当然你可以使用路由缓存来完成优化,也可以在nginx里面配置缓存内容,这样就可以直接从浏览器本地缓存里面拿数据
location /api {
proxy_pass http://192.168.0.0:80;
#expires作用于http, server, location。 可以控制HTTP应答中的“Expires”和“Cache-Control”的头标(起到控制页面缓存的作用)。
#如果expires为-1s,即永远过期,则reponse header为Cache-Control: no-cache, 当expires为正值,则header为Cache-Control: max-age = #
expires 1d;
}
location ~.*\.css$ {
expires 1d;
break;
}
location ~.*\.js$ {
expires 1d;
break;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
access_log off;
expires 15d; #保存15天
break;
}
mdn 里面,缓存是能对 get请求生效,而对post不生效。
防盗链
防止第三方引用链接访问我们的图片,消耗服务器资源和网络流量,我们可以在服务器上做防盗链限制。
实现防盗链的方式有两种:refer方式和签名方式。
refer方式实现防盗链,nginx模块ngx_http_referer_module通常用于阻挡来源非法的域名请求.我们应该牢记,伪装Referer头部是非常简单的事情,所以这个模块只能用于阻止大部分非法请求
location ~* \.(gif|jpg|png)$ {
# 只允许 192.168.0.1 请求资源
valid_referers none blocked 192.168.0.1;
if ($invalid_referer) {
# rewrite ^/ http://$host/logo.png;
return 403;
}
}
valid_referers: 指定资源访问是通过以下几种方式为合法,即白名单。 none:允许缺失的头部访问。 blocked:允许referer没有对应值的请求。 server_names:若referer站点域名与server_name中本机配的域名一样允许访问。
配置了防盗链后,可以运行在浏览器直接访问,但是通过外部网站链接来访问是无法实现的。