HTTP核心模块
<h2>connection和request区别</h2>
<ul>
<li>connection是连接,即常说的tcp连接,三次握手,状态机</li>
<li>request是请求,例如http请求,无状态的协议,request必须建立在connection之上</li>
</ul>
<h2>对connection做限制的limig_conn模块</h2>
<ul>
<li>用于限制客户端并发连接数</li>
<li>默认编译进nginx,通过--without-http_limit_conn_module禁用</li>
<li>使用共享内存,对所有worker子进程生效</li>
</ul>
<h2>对connection做限制的limig_conn模块常用指令</h2>
<pre><code class="language-nginx">limit_conn_zone
limit_conn_status
limit_conn_log_level</code></pre>
<h2>限制特定用户访问的auth_basic模块</h2>
<ul>
<li>
<p>生成密码文件工具</p>
<pre><code class="language-nginx"># 可执行程序
htpasswd
# 所属软件包
httpd-tools
# 生成新的密码文件
htpasswd -b -c encrypt_pass jack 123456
# 第一次添加要添加参数-c
# 添加新用户密码
htpasswd -b encrypt_pass mike 123456</code></pre>
</li>
<li>
<p>安装httpd-tools-2.4.6-90.el7.centos.x86_64</p>
<pre><code class="language-nginx">rmp -ivh httpd-tools-2.4.6-90.el7.centos.x86_64
# 会出现依赖,建议使用yum安装依赖的包,解决依赖问题</code></pre>
</li>
<li>
<p>查看安装完后的文件</p>
<pre><code class="language-shell">rpm -ql httpd-tools</code></pre>
</li>
</ul>
<h2>rewrite中的flag(标识)可选值</h2>
<ul>
<li>last
<ul>
<li>重写后的url发起新请求,再此进入server段,重试location的匹配</li>
</ul></li>
<li>break
<ul>
<li>直接使用重写后的url,不再匹配其他location中语句</li>
</ul></li>
<li>redirect
<ul>
<li>返回302临时重写向</li>
</ul></li>
<li>permanet
<ul>
<li>返回301临时重写向</li>
</ul></li>
</ul>
<h2>if (condition) condition 相关参数说明</h2>
<ul>
<li>$variable 仅为变量时,值为空或以0开头字符串都会被当做false处理</li>
<li>= 或 != 相等或不等比较</li>
<li>~ 或 !~ 正则匹配或非正则匹配</li>
<li>~* 正则匹配,不区分大小写</li>
<li>-f 或 ! -f 检查文件存在或不存在</li>
<li>-d 或 ! -d 检查目录存在或不存在</li>
<li>-e 或 ! -e 检查文件、目录、符号链接等存在或不存在</li>
<li>-x 或 ! -x 检查文件执行或不执行</li>
</ul>
<h2>变量分类</h2>
<ul>
<li>HTTP框架提供的变量</li>
</ul>
<h4>TCP连接相关变量</h4>
<table>
<thead>
<tr>
<th>参数</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>remote_addr</td>
<td>客户端地址,例如192.168.1.1</td>
</tr>
<tr>
<td>remote_port</td>
<td>客户端端口,例如58473</td>
</tr>
<tr>
<td>binary_remote_addr</td>
<td>客户端地址的整型格式</td>
</tr>
<tr>
<td>connection</td>
<td>已处理连接,是一个递增的序号</td>
</tr>
<tr>
<td>connection_request</td>
<td>当前连接上执行的请求数,对于keepalive连接有意义</td>
</tr>
<tr>
<td>proxy_protocol_addr</td>
<td>如果使用proxy_protocol协议,则返回原始用户的地址,否则为空</td>
</tr>
<tr>
<td>proxy_protocol_port</td>
<td>如果使用proxy_protocol协议,则返回原始用户的端口,否则为空</td>
</tr>
<tr>
<td>server_addr</td>
<td>服务器地址,例如192.168.184.240</td>
</tr>
<tr>
<td>server_port</td>
<td>服务器端口,例如80</td>
</tr>
<tr>
<td>server_protocol</td>
<td>服务端协议,例如HTTP/1.1</td>
</tr>
</tbody>
</table>
<h4>HTTP请求相关变量</h4>
<table>
<thead>
<tr>
<th>参数</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>conten_length</td>
<td>请求包体头部长度</td>
</tr>
<tr>
<td>content_type</td>
<td>请求包体类型</td>
</tr>
<tr>
<td>arg_参数名</td>
<td>URL中某个参数</td>
</tr>
<tr>
<td>args</td>
<td>所有URL参数</td>
</tr>
<tr>
<td>is_args</td>
<td>URL中有参数,则返回?;否则返回空</td>
</tr>
<tr>
<td>query_string</td>
<td>与args完全相同</td>
</tr>
<tr>
<td>uri</td>
<td>请求的URL,不包含参数</td>
</tr>
<tr>
<td>request_uri</td>
<td>请求的URL,包含参数</td>
</tr>
<tr>
<td>scheme</td>
<td>协议名,http或者https</td>
</tr>
<tr>
<td>request_method</td>
<td>请求的方法,GET、HEAD、POST等</td>
</tr>
<tr>
<td>request_length</td>
<td>所有请求内容的大小,包含请求行,头部,请求体</td>
</tr>
<tr>
<td>remote_user</td>
<td>由HTTP Basic Authentication协议传入的用户名</td>
</tr>
<tr>
<td>request_body_file</td>
<td>暂缺</td>
</tr>
<tr>
<td>request_body</td>
<td>暂缺</td>
</tr>
<tr>
<td>request</td>
<td>暂缺</td>
</tr>
</tbody>
</table>
<h4>Nginx处理请求时相关变量</h4>
<table>
<thead>
<tr>
<th>参数</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>request_time</td>
<td>请求处理到现在所耗费的时间,单位为秒,例如0.03代表30毫秒</td>
</tr>
<tr>
<td>request_completion</td>
<td>请求处理完成,则返回OK,否则为空</td>
</tr>
<tr>
<td>request_id</td>
<td>16进制显示的请求id,随机生成的</td>
</tr>
<tr>
<td>server_name</td>
<td>匹配上请求的server_name值</td>
</tr>
<tr>
<td>https</td>
<td>若开启https,则值为on,否则为空</td>
</tr>
<tr>
<td>request_filename</td>
<td>待访问文件的完整路径</td>
</tr>
<tr>
<td>document_root</td>
<td>由URI和root/alias规则生成的文件夹路径</td>
</tr>
<tr>
<td>realpath_root</td>
<td>将document_root中的软链接换成真实路径</td>
</tr>
<tr>
<td>limit_rate</td>
<td>返回响应时的速度上限值</td>
</tr>
</tbody>
</table>
<h4>Nginx返回响应时相关变量</h4>
<table>
<thead>
<tr>
<th>参数</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>body_bytes_sent</td>
<td>响应体中真实内容的大小</td>
</tr>
<tr>
<td>body_sent</td>
<td>全部响应体大小</td>
</tr>
<tr>
<td>status</td>
<td>HTTP返回状态码</td>
</tr>
</tbody>
</table>