服务器学习心得


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>

页面列表

ITEM_HTML