就是皮一下,靠这些去恰运维的饭,被打你也不能顺着网线找我啊!!!javascript
前言: 做为一名程序员,基础的Nginx仍是须要会一些,不管是项目部署,仍是性能优化,Nginx总能在你须要的时候给你帮上忙,本文咱们就搞一下经常使用的基础配置,本文主要以怎么用为主,不会涉及太多为何这么用。css
server {
listen 80;
server_name notes.jindll.com; # 这里是你的域名
location / {
root /notes; # 你的项目路径或者说要给客户端返回的资源在那个路径下 “/notes”表示根目录下notes文件夹下
index index.html; # 网站的默认初始页,用户直接访问域名无路径返回那个页面,及用户访问 http://notes.jindll.com 给用户返回那个文件
try_files $uri $uri/ /index.html; # 单文件应用必须有此配置
}
}
复制代码
/
表示匹配根路径http://notes.jindll.com/assets/css
,服务器就会到/notes/assets/css
这个位置找资源返回http://notes.jindll.com
没有路径,就会默认返回/notes/index.html
资源http://notes.jindll.com/abc
时,这里的 $uri
就是 /abc
。 try_files 会到服务器里(/notes/abc
)找这个文件。若是存在就直接把这个文件的内容发送给用户。 若是不存在而后就看 $uri/
,增长了一个 /
,也就是看有没有名为 /notes/abc/
的目录。 若是还不存在就看下一个选项,将/notes/index.html
返回server {
listen 80;
server_name notes.jindll.com; # 这里是你的域名
location / {
root /notes; # 你的项目路径或者说要给客户端返回的资源在那个路径下 “/notes”表示根目录下notes文件夹下
index index.html; # 网站的默认初始页,用户直接访问域名无路径返回那个页面,及用户访问 http://notes.jindll.com 给用户返回那个文件
try_files $uri $uri/ /index.html; # 单文件应用必须有此配置
}
location /dev {
root /docs;
index index.html;
}
}
复制代码
相比于上面的代码咱们加了一个location
块,即代表当服务器收到 http://notes.jindll.com/dev
访问时会走/dev
块,而后从/docs/dev
去查找资源返回前端
server {
listen 443 ssl;
server_name notes.jindll.com; # 这里是你的域名
#证书文件名称
ssl_certificate /ssl/notes/3048277_notes.jindll.com.pem;
#私钥文件名称
ssl_certificate_key /ssl/notes/3048277_notes.jindll.com.key;
ssl_session_timeout 5m;
#请按照如下协议配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#请按照如下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
root /notes; # 你的项目路径或者说要给客户端返回的资源在那个路径下 “/notes”表示根目录下notes文件夹下
index index.html; # 网站的默认初始页,用户直接访问域名无路径返回那个页面,及用户访问http://notes.jindll.com 给用户返回那个文件
try_files $uri $uri/ /index.html; # 单文件应用必须有此配置
}
location /dev {
root /docs;
index index.html;
}
}
复制代码
https的配置实际上是最简单的,不管是你在腾讯云仍是阿里云申请的https证书,他们都有详细的https配置说明。java
在上面的代码中主要加了ssl
开头的配置属性,另外监听的端口由80变为了443,由于https访问的端口就是443,咱们须要改的就是证书文件和私约文件的位置,这两个文件在你证书申请成功以后,将相关文件下载下来就能够了。nginx
server {
listen 443 ssl;
server_name notes.jindll.com; # 这里是你的域名
#证书文件名称
ssl_certificate /ssl/notes/3048277_notes.jindll.com.pem;
#私钥文件名称
ssl_certificate_key /ssl/notes/3048277_notes.jindll.com.key;
ssl_session_timeout 5m;
#请按照如下协议配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#请按照如下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass_header Server;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X_Forward_For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_pass http://127.0.0.1:3939; # 配置转发;将https://notes.jindll.com转发到本机http://127.0.0.1:3939
}
}
复制代码
websocket
的全部配置都在在location
块中(除proxy_pass),若是你须要配置websocket
能够直接将以上代码复制过去。核心代码实际上是proxy_set_header Upgrade $http_upgrade;
和proxy_set_header Connection 'upgrade';
,这两行的做用就是将http
协议升级为websocket
协议。程序员
server {
listen 80;
server_name notes.jindll.com; # 这里是你的域名
location / {
root /notes; # 你的项目路径或者说要给客户端返回的资源在那个路径下 “/notes”表示根目录下notes文件夹下
index index.html; # 网站的默认初始页,用户直接访问域名无路径返回那个页面,及用户访问 http://notes.jindll.com 给用户返回那个文件
try_files $uri $uri/ /index.html; # 单文件应用必须有此配置
}
location /dev {
root /docs;
index index.html;
add_header Cache-Control no-cache;
}
}
复制代码
协商缓存是一个与前端性能优化有关的东西,当用户在浏览器输入地址后,服务器须要将对应文件返回给浏览器,这是须要时间的。web
若是用户第一次在浏览器输入一个地址后,服务器将文件返回给浏览器,此时浏览器将文件缓存起来,下次用户再进这个地址,浏览器直接从缓存中取对应文件,那速度就比请求服务器快,这是强缓存。浏览器
强缓存的缺点就是服务器文件更新,但浏览器并不会及时更新,而是继续读本地缓存,固然能够设置缓存时间,但终究不是很是及时的。缓存
协商缓存就是地址输入后,浏览器将上次缓存文件的MD5
和文件更新时间发给服务器,服务器来确认这个文件有没有更新,有更新,服务器就去找文件,返回给浏览器,没更新就返回302状态码,浏览器直接读缓存。
低版本的nginx
配置协商缓存还须要作其余配置,若是你是根据个人nginx
安装教程来的,那就只须要在location
块中再添加一行add_header Cache-Control no-cache;
就能够。
另外,协商缓存或者强缓存其实更多的是针对静态资源文件,例如图片、音频、字体等,这些资源不会常常改变,因此采用缓存,让浏览器直接读本地缓存会有很是明显的性能提高。
server {
listen 80;
server_name notes.jindll.com; # 这里是你的域名
location / {
root /notes; # 你的项目路径或者说要给客户端返回的资源在那个路径下 “/notes”表示根目录下notes文件夹下
index index.html; # 网站的默认初始页,用户直接访问域名无路径返回那个页面,及用户访问 http://notes.jindll.com 给用户返回那个文件
try_files $uri $uri/ /index.html; # 单文件应用必须有此配置
}
location /dev {
root /docs;
index index.html;
add_header Cache-Control no-cache;
# 如下代码是开启GZip的
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 4;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
gzip_disable "MSIE [1-6]\.";
}
}
复制代码
gzip on;
开启GZip压缩
gzip_min_length 1k;
小于1k的文件不进行压缩
gzip_buffers 4 16k;
4 16k 表明以16k为单位,按照原始数据大小以16k为单位的4倍申请内存; 若是没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。
gzip_comp_level 4;
压缩级别 1-9; 1 压缩比最小处理速度最快,9 压缩比最大但处理最慢
gzip_types
对那些类型进行压缩; 我这里只压缩了 JS CSS XML , 若是没有 XML 类型文件,彻底能够去掉text/xml
; 我这里压缩类型没有写 HTML ,是由于不管是否指定"text/html"类型老是会被压缩; 另外不建议对图片,音乐等资源压缩,由于压缩效果不明显,而且对这些类型文件进行压缩,会消耗服务器大量资源, 得不偿失。
gzip_disable "MSIE [1-6]\.";
对IE6如下的浏览器不进行压缩,IE6不支持,会乱码;(如今还用IE6的也是神仙)
更多的关于GZip的介绍,能够看这个中文文档,地址:www.nginx.cn/doc/standar…
未开启
开启后