恰运维一口饭(Nginx经常使用配置)

就是皮一下,靠这些去恰运维的饭,被打你也不能顺着网线找我啊!!!javascript

前言: 做为一名程序员,基础的Nginx仍是须要会一些,不管是项目部署,仍是性能优化,Nginx总能在你须要的时候给你帮上忙,本文咱们就搞一下经常使用的基础配置,本文主要以怎么用为主,不会涉及太多为何这么用。css

安装

Nginx安装及启动配置文件等基础内容看我这篇文章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; # 单文件应用必须有此配置
  }
}
复制代码

详细说明

  • listen: 监听的端口,浏览器经过域名进入的,要监听的端口都是80,https是443端口
  • server_name: 服务别名,浏览器经过域名请求,服务器收到域名和server_name进行匹配,匹配到就往下走,匹配不到(那就看看浏览器什么反应)
  • location: 匹配域名后面的路径,/ 表示匹配根路径
  • root: 根路径配置,例如用户访问http://notes.jindll.com/assets/css ,服务器就会到/notes/assets/css 这个位置找资源返回
  • index: 网站的默认初始页,例如用户访问http://notes.jindll.com 没有路径,就会默认返回/notes/index.html 资源
  • try_files: 当用户访问 http://notes.jindll.com/abc 时,这里的 $uri 就是 /abctry_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 去查找资源返回前端

https配置

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

socket配置

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; 就能够。

另外,协商缓存或者强缓存其实更多的是针对静态资源文件,例如图片、音频、字体等,这些资源不会常常改变,因此采用缓存,让浏览器直接读本地缓存会有很是明显的性能提高。

启用GZIP压缩

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…

开启GZip与未开速度对比

未开启

image-20200217173519190

开启后

image-20200217173642958
相关文章
相关标签/搜索