nginx是怎么处理http请求的
nginx是怎么处理http请求的
参考:How nginx processes a request
nginx first decides which server should process the request. Let’s start with a simple configuration where all three virtual servers listen on port *:80:
nginx首先决定要用配置文件里的哪个server{}块来处理,假设有下面的server{}配置
server {
listen 80;
server_name aaa;
...
}
server {
listen 80;
server_name bbb;
...
}
nginx会根据过来的http请求头里的Host字段里的值,来判断使用哪个server{}。
- 如果请求头里没有Host字段,或者Host字段里的值,和Nginx配置文件里的server{}里的{server_name}都不匹配,则使用第一个server{},来处理这个请求。
- 如果请求头里的Host字段里的值和Nginx配置文件里的某个server{}里的{server_name},匹配上了,则使用这个server{},来处理这个请求。
可以使用curl工具来方便的做实验,curl可以设置http请求的请求头,所以可以任意设置Host字段,用【-H】来设置。下面的10.210.65.73是安装了nginx的机器的IP地址。
所以用下面的命令,发送了http请求后,nginx就会使用server{server_name aaa}来处理这个请求。
curl.exe -H "Host: aaa" 10.210.65.73
非常重要的结论:server_name对应的是http请求头里的Host字段的值
有了上面的理论支撑,就可以很容易的设置反向代理和负载均衡
- 当过来的http请求头里的Host字段为aaa时,storage.test来处理。
- 当过来的http请求头里的Host字段为bbb时,tracker.test来处理。
#负载均衡配置,IP为129的机器配置高,所以给他的数字的27,就是让它多处理
upstream storage.test {
server 10.210.65.129:80 weight=27;
server 10.210.65.130:80 weight=1;
}
#负载均衡配置
upstream tracker.test {
server 10.210.65.52:80 weight=7;
server 10.210.65.53:80 weight=2;
}
#文件的存储
server {
listen 80;
server_name aaa;
location / {
#http:://后面的内容是自己定义,对应上面upstream的名字
proxy_pass http://storage.test;
}
}
#文件服务器tracker
server {
listen 80;
server_name bbb;
location / {
#http:://后面的内容是自己定义的,对应上面upstream的名字
proxy_pass http://tracker.test;
}
}
server{}里的listen监听的是谁的端口?
监听的是:发送过来http请求的进程(大部分是浏览器)的端口(如果是http请求,则为端口为80),不是nginx服务器自己进程的端口。
nginx根据http请求头的Host字段里的值,和发送过来http请求的进程(大部分是浏览器)的端口,来决定使用哪个server{}来处理http请求。
c/c++ 学习互助QQ群:877684253
本人微信:xiaoshitou5854
nginx是怎么处理http请求的的更多相关文章
- Nginx 实现AJAX跨域请求
在工作中遇到跨域请求的问题: AJAX从一个域请求另一个域会有跨域的问题.那么如何在nginx上实现ajax跨域请求呢?要在nginx上启用跨域请求,需要添加add_header Access-Con ...
- nginx记录响应与POST请求日志
生产环境中的某些api出现故障,但是问题无法重现,但是又很想解决掉问题以及我们新项目上线,需要跟踪请求与响应的信息,可以预先找到一些bug,减少大面积的损失. 安装nginx与ngx_lua 响应日志 ...
- 解决Nginx+Tomcat下客户端https请求跳转成http的问题
Nginx上开启https, 后端使用Tomcat, 两者间走http协议, 但发现如果tomcat应用存在跳转时, 则客户端浏览器会出现400 Bad Request的错误, 通过抓包发现原因是 ...
- nginx 限制并发访问及请求频率
0. 1.参考 [工作]Nginx限制IP并发连接数和请求数的研究 Module ngx_http_limit_conn_module Module ngx_http_limit_req_module ...
- 使用nginx实现浏览器跨域请求
跨域访问问题, 相信很多人都遇到过, 并且都用不同的办法去解决过. 方法有很多种, 不一一叙述了. 这里主要使用nginx反向代理来解决跨域问题. 啥是跨域? 假如你是百度开发人员, 在百度页面去请求 ...
- nginx 实现 ajax 跨域请求
原文:http://www.nginx.cn/4314.html AJAX从一个域请求另一个域会有跨域的问题.那么如何在nginx上实现ajax跨域请求呢?要在nginx上启用跨域请求,需要添加a ...
- Nginx下HTML页面POST请求静态JSON数据返回405状态
在浏览器访问HTML页面,发现一些静态JSON数据没有显示,F12查看,如下图所示: 可以看到请求方式为POST 将请求链接复制在浏览器地址栏访问,可以正常请求到数据 F12查看,可以看到请求方式为G ...
- 【原创】大叔经验分享(77)openresty(nginx+lua)发http请求
openresty(nginx+lua)发http请求 利用location+proxy_pass间接实现 location ^~ /test/http { internal; proxy_pass ...
- 你连Nginx怎么转发给你请求都说不清楚,还好意思说自己不是CRUD工程师?
目录 一.Nginx工作原理二.Nginx进程模型三.Nginx处理HTTP请求流程 Nginx 工作原理 Nginx由内核和模块组成,Nginx本身做的工作实际很少,当它接到一个HTTP请求时,它仅 ...
随机推荐
- 033.[转] Java 工程师成神之路 | 2019正式版
Java 工程师成神之路 | 2019正式版 原创: Hollis Hollis 2月18日 https://mp.weixin.qq.com/s/hlAn6NPR1w-MAwqghX1FPg htt ...
- gcc 4.9 编译安装 in Ubuntu 18.04(主要用于在无root权限下,进行更新系统 gcc 版本)
gcc 4.9 编译安装教程,因为项目编译过程中,需要采用特定的gcc版本来进行编译,所以进行简要记录,进行备忘: 下载:curl -O -L https://mirrors.tuna.tsinghu ...
- driver.find_element_by_xpath.clear()无法清空输入框默认值
输入框带默认值,想删除默认值,填写新内容,使用clear()再send_keys(), 发现这种方式无法清除,只会在默认值后面追加新的内容. 上网搜了一下,有两种解决方案,如下: 方法一: 先双击,后 ...
- HTML标记一览表
- 学习笔记:Django开发网上教育平台(参考了慕课网的教学视频)
第一步:进行环境的搭建(用到的IDE:pycharm ,数据库为mysql.nacicat.编辑语言python3.7.以及自己配置的虚拟环境venvpy37) Django==2.2 配置好 ...
- AcWing 21. 斐波那契数列
题目地址 https://www.acwing.com/solution/acwing/content/2896/ 题目描述输入一个整数 n ,求斐波那契数列的第 n 项. 假定从0开始,第0项为0. ...
- 【python爬虫】初识爬虫
一.爬虫的定义 爬虫定义:程序或者脚本——自动的爬取万维网的数据的程序或者脚本. 二.爬虫可以解决的问题 1.解决冷启动问题. 2.搜索引擎的根基——通用爬虫. 3.帮助机器学习建立知识图谱. 4.制 ...
- 使用composer安装Larave提示“Changed current directory to C:/Users/Administrator/AppData/Roaming/Composer”
解决办法: 根据官方手册执行composer global require "laravel/installer" 显示Changed current directory to C ...
- js input radio点击事件
html代码: <input type="radio" name="myname" value="1" />1 <inpu ...
- Unity Settings Deamon crash in 16.04 every time after boot
安装ubuntu 16.04的时候,出现这样一个错误: unity-settings-deamon crashed with SIGSEGV in up_exported_dae (can't rea ...