Web前端必备-Nginx知识汇总
一、Nginx简介
Nginx是一个高性能、轻量级的Web和反向代理服务器, 其特点是占有内存及资源少、抗并发能力强。
Nginx安装简单、配置简洁、启动快速便捷、支持热部署、支持 SSL、拥有高度模块化的设计。
Nginx的主要功能有:
- Web服务器
- 反向代理
- 负载均衡
二、运行和控制Nginx
备注: 以下命令中的 /usr/local/nginx 是nginx二进制文件的绝对路径,需根据自己实际的安装路径而定。
1.启动
/usr/local/nginx/sbin/nginx
2.重新打开日志文件
/usr/local/nginx/sbin/nginx -s reopen
3.重新载入配置文件
/usr/local/nginx/sbin/nginx -s reload
4.停止
/usr/local/nginx/sbin/nginx -s stop
5.从容停止
(1) 查看进程号
ps -ef|grep nginx
(2) 杀死进程
kill -QUIT <进程号> 或 kill -TERM <进程号>
6.强制停止
pkill - nginx
三、Nginx作为Web服务器
Nginx作为Web服务器, 需要定义server虚拟主机,让这些虚拟主机去处理对于特定域名或IP地址的请求。
每个server虚拟主机都定义了 location 指令,location 定义了对于指定的一组 URI 是如何匹配和进行处理的。
1.web服务器基本实例
server {
listen ;
server_name www.example.com;
location / {
root /usr/local/www;
index index.html;
}
}
参数说明:
- server 代表1个虚拟主机,可以有多个
- server_name 匹配请求的指定域名或IP地址
- location 配置请求的路由,匹配对应的URI
- root 查找资源的路径(文件夹目录)
- index 默认查找
2.location匹配规则(请求过滤)
(1) 语法
server {
location 表达式 {
}
}
(2) location表达式的类型
- @ 它定义一个命名的 location,使用在内部定向时,例如 error_page, try_files
- / 通用匹配,任何请求都会匹配到
- = 开头, 表示精确匹配, 只有请求的url路径与=后面的字符串完全相等才会匹配到(优先级最高)
- ^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他location
- ~ 开头表示区分大小写的正则匹配
- ~* 开头表示不区分大小写的正则匹配
(3) location表达式的优先级
- = 的优先级最高。一旦匹配成功,则不再查找其他匹配项。
- ^~ 类型表达式。一旦匹配成功,则不再查找其他匹配项。
- ~ 和 ~* 的优先级次之。如果有多个location的正则能匹配的话,则使用正则表达式最长的那个。
- 常规字符串匹配类型。按前缀匹配。
3.URL重写
URL重写是指: 当请求的URL满足事先定义好的规则时, 将跳转/定向到某个规则,比如常见的伪静态、301重定向、浏览器定向等。
(1) 语法
server {
rewrite 规则 定向路径 重写类型;
}
rewrite参数说明:
- 规则:字符串或者正则来表示想匹配的目标url
- 定向路径:匹配到规则后要定向的路径,如果规则里有正则,则可以使用
$index
来表示正则里的捕获分组 - 重写类型:
- last :表示完成rewrite,浏览器地址栏URL地址不变
- break;本条规则匹配完成后,终止匹配,不再匹配后面的规则,浏览器地址栏URL地址不变
- redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址
- permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
(2) 示例
域名跳转: 访问 http://www.aaa.com 跳转到 http://www.bbb.com
server {
listen ;
server_name www.aaa.com;
location / {
rewrite ^/$ www.bbb.com permanent ;
}
}
4.try_files
try_files是指: 按顺序检查文件是否存在,返回第一个找到的文件。如果所有的文件都找不到,会进行一个内部重定向到最后一个参数.
(1) 语法
try_files file1 files2 ... uri
参数说明:
- 最后一个参数是回退URI, 且必须存在,否则将会出现内部500错误。
- 只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。
- 最后一个参数也可以是一个命名的location。
- 最后一个参数如果不是命名的location那么$args不会自动保留,如果你想保留$args,必须在最后一个参数里明确声明。示例为:
try_files $uri $uri/ /index.php?q=$uri&$args;
(2) 示例
- 跳转到文件
当访问:http://www.example.com/test 时会依次查找,若 1.html,2.html 都不存在,最终返回 3.html
server {
listen ;
server_name www.example.com;
root html;
index index.html;
location /test {
try_files /.html /.html /.html;
}
}
- 跳转到变量
当访问:http://www.example.com/test 时会依次查找,若 1.html,2.html 都不存在,则跳转到命名为abc的location
server {
listen ;
server_name www.example.com;
root html;
index index.html;
location /test {
try_files /.html /.html @abc;
}
location @abc{
rewrite ^/(.*)$ http://www.example2.com;
}
}
- vue-router设置HTML5 History 模式时, nginx的配置如下:
location / {
# URL 匹配不到任何静态资源,返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。
try_files $uri $uri/ /index.html;
}
5.Gzip配置
server {
# 开启gzip 压缩
gzip on;
# 设置gzip所需的http协议最低版本 (HTTP/1.1, HTTP/1.0)
gzip_http_version 1.1;
# 设置压缩级别(1-9), 值越大压缩率越高,同时消耗cpu资源也越多,建议设置在4左右
gzip_comp_level 4;
# 设置压缩的最小字节数, 页面Content-Length获取
gzip_min_length 1000;
# 设置压缩文件的类型 (text/html), 不建议压缩图片(如jpg、png本身已压缩)
gzip_types text/plain application/javascript text/css;
#配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
gzip_disable "MSIE [1-6]\.";
}
6.https配置
http {
# 配置共享会话缓存大小,视站点访问情况设定
ssl_session_cache shared:SSL:10m;
# 配置会话超时时间
ssl_session_timeout 10m;
server {
listen 443;
server_name www.example.com;
ssl on;
# 设置长连接
keepalive_timeout 70;
# HSTS策略
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# 证书文件
ssl_certificate www.example.com.crt;
# 私钥文件
ssl_certificate_key www.example.com.key;
# 优先采取服务器算法
ssl_prefer_server_ciphers on;
# 指定SSL协议
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# 定义算法
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
# 减少点击劫持
add_header X-Frame-Options DENY;
# 禁止服务器自动解析资源类型
add_header X-Content-Type-Options nosniff;
# 防XSS攻擊
add_header X-Xss-Protection 1;
}
}
四、Nginx作为反向代理服务器
server {
listen 80;
server_name www.example.com;
root html;
index index.html;
location /test {
# 请求host
proxy_set_header Host $http_host;
# 请求ip
proxy_set_header X-Real-IP $remote_addr;
# 请求协议
proxy_set_header X-Scheme $scheme;
# 代理服务器
proxy_pass http://localhost:3000;
}
}
当访问http://www.example.com/test时, nginx会将请求转发到http://localhost:3000上。
五、Nginx作为负载均衡
1.负载均衡的介绍
在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器。
负载均衡用于从 "upstream" 模块定义的后端服务器列表中选取一台服务器接受用户的请求。
2.负载均衡的基本实例
(1) upstream模块
一个最基本的upstream模块如下:
#动态服务器组, server是后端服务器,my_server是自定义的服务器组名称。
upstream my_server {
server localhost:8001;
server localhost:8002;
server localhost:8003;
}
(2) 反向代理
在upstream模块配置完成后,要让指定的访问反向代理到服务器组。
server {
listen 80;
server_name www.example.com;
root html;
index index.html;
location / {
# 反向代理到定义好的服务器组my_server
proxy_pass my_server;
}
}
(3)完整配置
http {
upstream my_server {
server localhost:8001;
server localhost:8002;
server localhost:8003;
}
server {
listen 80;
server_name www.example.com;
root html;
index index.html;
location / {
# 反向代理到定义好的服务器组my_server
proxy_pass my_server;
}
}
}
3. 负载均衡策略
(1) 轮询(默认方式)
表示每个请求按时间顺序逐一分配到不同的后端服务器。
upstream my_server {
server localhost:8001;
server localhost:8002;
}
(2) weight(权重方式)
表示在轮询策略的基础上指定轮询的服务器的权重,默认为1,权重越高分配到需要处理的请求越多。
upstream my_server {
server localhost:8001 weight=1;
server localhost:8002 weight=2;
}
(3) ip_hash
表示指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。
upstream my_server {
ip_hash;
server localhost:8001;
server localhost:8002;
}
备注:
- 在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)。
- ip_hash不能与backup同时使用。
- 此策略适合有状态服务,比如session。
- 当有服务器需要剔除,必须手动down掉。
(4) least_conn
表示把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。
upstream my_server {
least_conn;
server localhost:8001;
server localhost:8002;
}
(5) down
表示当前的server暂时不参与负载均衡。
upstream my_server {
server localhost:8001 down;
server localhost:8002;
server localhost:8003;
}
(6) backup
表示预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因 此这台机器的压力最轻。
upstream my_server {
server localhost:8001 backup;
server localhost:8002;
server localhost:8003;
}
Web前端必备-Nginx知识汇总的更多相关文章
- web前端project师知识汇总
分类: Web开发应用 一.何为Web前端project师? 前端project师,也叫Web前端开发project师.他是随着web发展.细分出来的行业.Web前端开发proj ...
- WEB前端必备掌握知识
1.跨域: 跨域问题是由于javascript语言安全限制中的同源策略造成的.
- Web 前端必备的各种跨域方式汇总
Web 前端必备的各种跨域方式汇总 跨域方式汇总 同源策略 协议相同 + 域名相同 + 端口相同 https://www.xgqfrms.xyz/index.html https://www.xgqf ...
- 、web前端的这么知识应该是怎样的一个知识体系架构?
.web前端的这么知识应该是怎样的一个知识体系架构?之前我以为可以以W3C为纲要,把W3C的东西学会了就够了.后来发现我错了,W3C还不全面. 真正全面的覆盖了web前端知识体系的东西是——浏览器内核 ...
- Web前端工程师-优秀简历汇总
Web前端工程师-优秀简历汇总 1. http://www.linqing07.com/resume.html 2. http://www.flqin.com/#page2 3. ht ...
- Web 前端面试小知识
简历投递 前期为了解自身短板, 可以海投一些试试. 不建议长期海投简历, 对用人单位简历筛选和你自身都没什么好处. 投简历之前最起码要关注以下几点(薪资范围, 公司位置, 职位要求, 是否为培训机构冒 ...
- 初学者入门web前端 C#基础知识:数组与集合
对于初学者,想要入门web前端,要有足够的信念和坚持,不然只会越走越远,我现在就深深的体会到. 我本是一个很拒绝代码的人,以前想过UI设计,但是在这段学习时间里,发现其实只要认真,代码并不是很难 所以 ...
- Web前端之基础知识
学习web前端开发基础技术须要掌握:HTML.CSS.Javascript 1.HTML是网页内容的载体 内容就是网页制作者放在页面上想要让用户浏览的信息,能够包括文字.图片.视频等. 2.CSS样式 ...
- web前端常见面试题汇总
一.理论知识 1.1.讲讲输入完网址按下回车,到看到网页这个过程中发生了什么 a. 域名解析 b. 发起TCP的3次握手 c. 建立TCP连接后发起http请求 d. 服务器端响应http请求,浏览器 ...
随机推荐
- 聊聊order by的工作机制
总结写在前面: 1. 介绍了orderBy的两种算法流程:全字段排序 和 rowid排序. 2. rowid排序 相比 全字段排序,参与排序字段较少,耗内存较少,多一步回表,如果内存够的情况下MySQ ...
- java 知识点总结(转)
转载自 https://www.cnblogs.com/wl310538259/p/5218251.html (一)Java 1.接口和抽象类的区别 ①抽象类里可以有构造方法,而接口内不能有构造方法. ...
- 使用Jmeter进行压力测试结果偏差较大原因分析
Apache软件基金会(ASF)是一家总部位于美国的非营利性慈善组织.ASF的所有产品都通过公共论坛的在线协作开发,并从美国境内的中央服务器分发.Jmeter是ASF的一款开源免费软件 ,在国内被很多 ...
- 在d盘创建文件夹,里面有aaa.txt/bbb.txt/ccc.txt,然后遍历出aaa文件夹下的文件(新手)
//导入的包.import java.io.File;import java.io.IOException;//创建的一个类.public class zy { //公共静态的主方法. public ...
- Java-用集合存储对象(新手)
//导入的包.import java.util.ArrayList;//用集合存储对象,遍历集合,取所有元素. 用get方法.//创建的一个类.public class zylx4 { //公共静态的 ...
- ADO.NET 的使用(一)
一.ADO.NET概要 ADO.NET 是一组向 .NET Framework 程序员公开数据访问服务的类. ADO.NET 为创建分布式数据共享应用程序提供了一组丰富的组件. 它提供了对关系数据.X ...
- Java程序员应该知道的20个有用的lib开源库
一般一个经验丰富的开发者,一般都喜欢使用开源的第三方api库来进行开发,毕竟这样能够提高开发效率,并且能够简单快速的集成到项目中去,而不用花更多的时间去在重复造一些无用的轮子,多了解一些第三方库可以提 ...
- html5 window.postMessage 传递数据的使用
window.postMessage(图片介绍): 发送方(图片介绍): 接收方(图片介绍): 个人测试一(iframe): 发送方,地址为:http://localhost:63342/HelloH ...
- Selenium系列(九) - 针对alert窗口的处理(警告框、确认框、对话框)
如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...
- 用卷积神经网络和自注意力机制实现QANet(问答网络)
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/ ,学习更多的机器学习.深度学习的知识! 在这篇文章中,我们将解决自然语言处理(具体是指问答)中最具挑战性 ...