nginx和host的关系

假设本地host文件:

www.test.com 127.0.0.1

本地nginx.config文件:

upstream www.test.com {
    server 192.168.10.78:9003 weight=1;
}
upstream static.test.com {
    server 127.0.0.1:8585 weight=1;
}
server {
    listen       80;
    server_name  www.test.com;

    location / {
        proxy_pass http://www.test.com;
    }
    location =/ {
        proxy_pass http://static.test.com;
    }
}

如果我现在在浏览器输入www.test.com回车会发生什么?
1.走nginx被代理到http://192.168.10.78:9003;
2.走host被代理到127.0.0.1
3.先走nginx被代理到http://www.test.com然后走了ho...
如果我现在在浏览器输入www.test.com/abcd/fff回车又会发生什么?
本来对ngin并没有很理解现在配上host更乱了;有大佬能解释下么?或者说我的文件写错了?

阅读 26.9k
1 个回答

假设nginx搭建在本地, 用的是 HTTP1.1, 浏览器输入www.test.com回车:

  1. 检查本地 hosts 文件, 发现有该域名的解析,拿到解析的 ip: 127.0.0.1
  2. 连接 127.0.0.1:80 端口, 并发送 http 报文,报文第一行为GET / HTTP/1.1, 后续数据包括 Host: www.test.com
  3. nginx拿到报文,发现请求uri/, hostwww.test.com。匹配到server_name www.test.com这个server,由于 location =/ 精确匹配优先度比 location / 高, 所以转请求到 http://static.test.com 也就是 http://127.0.0.1:8585/

浏览器输入www.test.com/abcd/fff, nginx匹配到location /, 所以走http://www.test.com, 也就是192.168.10.78:9003

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用
推荐问题
宣传栏