【Nginx】5. 如何处理请求
2021/10/2 7:14:27
本文主要是介绍【Nginx】5. 如何处理请求,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
弄清nginx是如何转发请求的,对理解nginx的server块的配置很有意义。
配置文件中可以有多个 server 块,所以这里配置2个server块,来看当以不同域名(主机地址)发送请求时,nginx将该请求转发到了哪里
1.server块(2个)配置:
server { listen 80; server_name hanmk.com; location / { root /tmp/data/; # 1 把服务指向了服务器 /tmp/data/路径下的静态文件 autoindex on; } } server { listen 80 default_server; server_name demo.com ; location / { # 2.1 tomcat首页 proxy_pass http://localhost:8080; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location /jenkins { # 2.2 tomcat下部署的jenkins proxy_pass http://127.0.0.1:8080; ... # 查看<反向代理实例>中的配置 } location /ApprPhD { # 2.3 nodeJs服务器 proxy_pass http://192.168.XXX.XXX:3030; proxy_set_header Host $host; ... # 查看<反向代理实例>中的配置 } }
说明:
第1个server中,把服务指向了服务器中的静态文件;第2个server中,把服务指向了3个路由。两个server中配置的监听端口都是80(为了更好地查看测试效果)。
server_name指定(虚拟主机)服务器名称,一般会配置域名。当在外网访问一个请求链接时,nginx会根据你填写的主机名称来匹配是转发到server1还是server2。
如:example.org,www.example.org,可以使用精确的名称、通配符名称或正则表达式定义。
同样为了更好地查看测试效果,所以在server_name中填写域名,而不填写 虚拟机ip 或 localhost。因为ip地址都是虚拟机ip,填写ip地址的话,看不出来nginx是如何转发请求的。
如果只有一个server的话,server_name其实没有填写的必要,因为最终都会转发至该server下的服务器。我试了下,只要端口正确,都可以转发成功,内部原理还不清楚。
- server1中server_name填写hanmk.com。
- server2中server_name填写demo.com。
完成上述配置后,需要重新加载一下配置文件nginx.conf
2.配置客户端的hosts文件
在server_name中,配置了hanmk.com和demo.com,但是因为并没有开通域名服务,所以直接在客户端使用这2个域名来发送请求,是会失败的。
为了能使用这两个假域名正常发送请求,要先在客户端主机配置一下,步骤如下:
-
打开hosts文件(C:\Windows\System32\drivers\etc\hosts),添加如下两行即可;
(因为映射ip地址相同,所以把两个域名加在一行也可以,用空格隔开)
3.测试
(1)使用http://hanmk.com/发送请求,访问到的是虚拟机 /tmp/data/路径下的静态文件
(2)访问http://demo.com/、http://demo.com/jenkins、http://demo.com/ApprPhD/index,分别跳转到tomcat首页、jenkins登录页面、apprPhD
总结:说明nginx根据访问链接域名的不同,匹配到了相应的server服务器,然后再根据location路径,路由到对应的服务。
4.(补充)参数default_server
当一个请求的host名,与任何一个server_name都不匹配时,这个请求会默认转向第一个server(这是nginx的标准默认行为)。
还可以显式地设置哪个服务器应该是默认的:在listen指令中使用default_server参数(在上面第2个server块中,监听端口后有一个参数 default_server)
1、在两个server块中都不加default_server参数,然后以ip进行访问:http://192.168.233.128/
因为ip地址不匹配hanmk.com和demo.com,所以默认转发到了第一个server块
2、在第二个sever块中加上default_server参数后,访问:http://192.168.233.128/
server { listen 80 default_server; }
同样的ip链接,转发到了第二个server块
这篇关于【Nginx】5. 如何处理请求的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-13用Nginx防范DDoS攻击的那些事儿
- 2024-12-13用Terraform在AWS上搭建简单NGINX服务器指南
- 2024-10-29Nginx发布学习:从入门到实践的简单教程
- 2024-10-28Nginx发布:新手入门教程
- 2024-10-21nginx 怎么设置文件上传最大20M限制-icode9专业技术文章分享
- 2024-10-17关闭 nginx的命令是什么?-icode9专业技术文章分享
- 2024-09-17Nginx实用篇:实现负载均衡、限流与动静分离
- 2024-08-21宝塔nginx新增8022端口方法步骤-icode9专业技术文章分享
- 2024-08-21nginx配置,让ws升级为wss访问的方法步骤-icode9专业技术文章分享
- 2024-08-15nginx ws代理配置方法步骤-icode9专业技术文章分享