Nginx
2020-03-05 16:05:55来源:博客园 阅读 ()
Nginx
Nginx
什么是Nginx
Nginx是一个高性能的HTTP服务器和反向代理web服务器,主要功能就是反向代理,通过配置文件可以实现负载均衡和集群,静态资源虚拟化
什么是反向代理
正向代理:客户端 ---> 代理服务器 ---> 目标服务器 ---> 内容返回
反向代理:用户请求目标服务器,由代理服务器决定将请求分发到哪个节点的IP上
区别:正向代理是向目标服务器隐藏真实的客户端,反向代理是向客户端隐藏真实的服务器
Nginx的进程模型
当Nginx启动后会自动有一个master进程和一个worker进程,master进程是主进程,worker是工作进程,工作进程是为主进程进行服务的,当主进程接收到信号之后,会将信号发送给工作进程,由工作进程去完成各种请求,当worker进程异常退出或关闭时,master进程会重新foke出一个新的工作进程来进行工作,工作进程的数量可以通过nginx.conf文件进行配置,每个woker进程可以连接多个客户端,连接数量也可以通过nginx.conf这个文件进行配置,在envents这个节点中进行配置,默认的每个woker进程连接最大值是1024,这个数值是可以手动修改的,你可以设置为10240。
Nginx处理web请求机制
每个woker进程可以连接多个客户端,客户端发来的请求是有顺序的,woker进程也是顺序执行请求,当其中某个客户端如果陷入了阻塞时,那么woker进程会立即处理下一个客户端的请求,而不会一直等待阻塞的客户端,这种类似于IO多路复用模型
Nginx显示默认首页解析过程
当我们在本地部署了Nginx之后,打开浏览器输入localhost之后就能直接访问到nginx的首页,这是因为如果我们不做任何配置,直接在浏览器中输入地址并且不加端口号,那么默认请求的就是80端口,而在nginx.conf文件中就有一个server节点是监听的80端口:
server {
#监听的端口号
listen 80;
#访问的路径,如果是部署在虚拟机上或者是外网上,那么就输入虚拟机的IP地址或者外网的域名,
#如果你是在本地部署的,那么直接输入localhost
server_name localhost;
#这个端口默认访问的路径,location斜杠后面的内容会拼接到root设置的目录后面
#在这段配置中最终的访问路径就是html/,这个路径是可以自定义的
location / {
root html;
index index.html index.htm; #默认的显示页面
}
}
自定义路径设置:
server {
listen 80;
server_name localhost;
location /img {
root /home;
}
}
假设nginx部署在虚拟机,ip为192.168.1.7
访问方式:192.168.1.7/img/xxx.png
使用别名:
server {
listen 80;
server_name localhost;
location /static {
alias /home/img;
}
}
访问方式:192.168.1.7/static/xxx.png
location匹配规则
默认匹配规则
server { listen 80;
server_name localhost;
location / {
root /home;
}
}精准匹配
server { listen 80;
server_name localhost;
location = /img/face1.png {
root /home;
}
}
如果使用精准匹配的话,那么只能访问到face1.png这张图片,同一目录下的其它图片是访问不到的,文件夹同理正则表达式匹配
server { listen 80;
server_name localhost;
location ~* \.(GIT|png|jpg|jpeg) {
root /home;
}
}
正则表达式的匹配规则是以~开头的,*代表不区分大小写,匹配规则为只能访问home目录下设置好的图片
格式,不是以上设置的图片格式或其它文件,将无法访问
Nginx常用命令
nginx的命令都是需要在sbin目录下执行才有效的
./nginx -s -stop : 快速关闭,不管当前是否还有用户请求在执行,都会直接进行关闭(不推荐)
./nginx -s -quit : 当用户的请求还在执行时不会进行关闭,直到用户的请求处理完成之后,在此期间,不会接受新用户的请求
./nginx -t : 用来检测配置文件的语法是否正确,设置是否正确的
./nginx -s reload : 重新加载或重新启动nginx服务,通常是在修改了nginx的配置文件之后使用
./nginx -v : 显示当前Nginx的版本
DNS域名解析
我们日常在浏览器中输入各种域名去访问各种网站,例如:www.baidu.com
为什么输入域名之后就可以访问到对应的网站,我们来看看中间隐藏的部分
- 用户打开浏览器输入域名
- 然后会跳转到DNS服务器中查找这个域名所对应的IP地址
- 找到了IP地址就可以访问该网站的资源了,相反就不可以
从上面的步骤我们不难看出,最终我们还是通过IP来访问各种网站了,只不过其中有一系列的步骤对用户是透明的,那既然都是通过IP来访问,为什么还需要有域名?
因为IP是一大串的数字,实在不好记忆,而且IP地址因为各种原因还可能导致变更,而域名是不会变得,又相对好记忆,所以现在都是使用的域名
那假设我们并没有自己的云服务器和备案过的域名,又想通过域名的方式来访问本地的资源或者虚拟机上的资源,我们可以通过修改hosts文件来对我们的IP进行一个域名的绑定,只不过这个域名只能在自己本地使用,外网是无法进行访问的。
前面我们说的,在浏览器中输入域名之后是会去DNS服务器中查找的,但其实在这之前,浏览器会先去我们本地的hosts文件中查找,如果没有的话,再去的DNS服务器
在mac OS系统中,我们可以通过命令行打开hosts文件:
vim /etc/hosts 就可以看到如下:
127.0.0.1 localhost
127.0.0.1是我们本地的IP,绑定了localhost,所以我们在浏览器中输入localhost就可以访问本地的资源,假设我们在本地部署了nginx服务,那么启动之后通过浏览器输入localhost就可以打开nginx的首页,如果我们不想用localhost来访问,而是通过我们自定义的域名来访问,那我们可以这样做:
127.0.0.1 www.baidu.com
这样在浏览器中输入www.baidu.com就不会访问到百度的页面了,而是到了nginx的首页
Nginx中解决跨域问题
server {
listen 80;
server_name localhost;
#允许跨域请求的域,*代表所有
add_header 'Access-Control-Allow-Origin' $http_origin;
#允许带上cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
#允许请求的方法,比如 GET/POST/PUT/DELETE
add_header 'Access-Control-Allow-Methods' *;
#允许请求的header
add_header 'Access-Control-Allow-Headers' *;
location / {
if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin $http_origin;
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Allow-Methods $http_access_control_request_method;
add_header Access-Control-Allow-Headers $http_access_control_request_headers;
add_header Access-Control-Max-Age 3600;
add_header Content-Length 0;
return 200;
}
}
Nginx配置反向代理及集群
反向代理配置
//1.在nginx.conf文件中配置upstream上游服务,在这个指令块中写上你需要代理的服务的IP加端口号,
//这里代理的是tomcat服务器
upstream tomcats {
server 192.168.1.7:8088;
}
//2.在server指令块中
server {
listen 80;
server_name www.lcz.com;
location / {
proxy_pass http://tomcats;
}
}
我们来解释一下这段配置的含义,假设,我们在虚拟机上搭建一台Nginx服务器中,并为这台虚拟机的IP绑定了
一个自定义的域名:www.lcz.com,并监听的是80端口,所以,我们在浏览器中输入www.lcz.com就可以直接
访问到Nginx了,到了Nginx之后会就查看location的路径匹配了,这个时候会发现,location中有个指令:
proxy_pass,这个指令就是反向代理的意思,然后发现它配置了一个http://tomcats的东西
最后会去配置文件中找有没有名为tomcats的upstream指令块,找到之后发现upstream指令块中配置了一个
server指令,这个指令指向了一个部署了tomcat的服务器IP,就会将请求转发到这个部署了tomcat的
服务器上,这就实现了反向代理的功能
反向代理:发送请求到目标服务器,由代理服务器决定将请求落在哪个目标服务器的节点上
集群配置
在upstream指令块中配置多个server指令,就组成了一个集群,根据负载均衡的不同策略,
决定将请求落在哪台服务器上
upstream tomcats {
server 192.168.1.7:8088;
server 192.168.1.8:8088;
}
server {
listen 80;
server_name www.lcz.com;
location / {
proxy_pass http://tomcats;
}
}
负载均衡策略
轮询
Nginx的负载均衡策略默认的就是使用轮询,轮询就是将请求平均的分配给不同的tomcat 假设我们现在有两台tomcat,分别是tomcat1和tomcat2,那么在使用轮询的策略时,当用户发起第一
次请求时会落在tomcat1,第二次就tomcat2,第三次就tomcat1,依次类推权重
权重越高的tomcat被落到的请求也就越多,在默认的轮询策略中,所有的tomcat的权重都1,所以请求 是平均分发的
upstream tomcats {
server 192.168.1.7:8088 weight=1;
server 192.168.1.8:8088 weight=2;
}
原文链接:https://www.cnblogs.com/islcz/p/Nginx.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 5月到6月程序员到底经历了和什么,工资狂跌***元,你是否也 2020-06-10
- 为什么阿里巴巴Java开发手册中不允许魔法值出现在代码中? 2020-06-09
- 计算机基础到底是哪些基础?为什么很重要! 2020-06-08
- 为什么阿里巴巴Java开发手册中强制要求接口返回值不允许使用 2020-06-06
- 高手眼中的观察者模式有什么不一样 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash