nginx之HTTP模块配置
listen 指令只能使用与server字段里
如果本地调用可以监听本地Unix套接字文件,性能更加,因为不用走内核网络协议栈
listen unix:/var/run/nginx.sock;
针对端口加地址的监听;表示之匹配127.0.0.1的8000端口请求
listen 127.0.0.1:8000;
监听本机所有IP的端口
listen 8000;
或者这么表示
listen *:8000;
监听IPV6地址
listen [::]:8000 ipv6only=on;
处理HTTP请求头部流程

内核与客户端建立好tcp 连接后,根据客户端的访问的端口判断交给系统那个系统处理,这是我们的nginx监听的端口(448或者80),是客户端请求的端口,这是内核会根据负载均衡算法选择一个work进程里的一个epoll_wait方法会返回已建立好的句柄,这是一个读事件,读取请求,跟据请求调用accept方法分配连接内存池,接下来就是http模块处理 调用ngx_http_init_connection方法读取事件添加epll_ctl中,并添加一个定时器,如果60秒没有收到请求,就会超时;读取用户请求数据从内核,然后在内核的用户态分配内存,默认分配1k空间可以设置,

接收到用户请求后会分配请求内存池,默认4K可以做调整,然后用状态机解析请求的行,解析的时候如果发现url地址1k内存放不下,nginx会自动扩充内存,默认最大扩充到4 8k,表示先把那1k的数据复制8k里,用剩下的7k在去接受用户剩下的url,如果还不够就会在分配8k,默认最大分配32k,靠nginx内置变量标识url,然后解析http的header部分,在分配大内存主意这个大内存与URL的大内存共用的,标识头部确定那个server块处理请求,当标识完全部header后,就移除定时器,开始11个阶段的http请求处理
nginx的正则
元字符
. 可以匹配除换行符以外的任意字符
\w 可以匹配字母或者数字会在下划线或者数字
\s 匹配任意的空白字符
\d 匹配数字
\b 匹配单词开始或结束
^匹配字符串的开始
$匹配字符串的结束
重复
* 重复零次或多次
+ 重复1次或更多次
?重复零次或一次
{n} 重复n次
{n,}重复n次或者更多次
{n,m}重复n到m次
实例

server name 指令
server {
server_name chenxi.com www.cx.com;
server_name_in_redirect off;
return 302 /redirect;
}
[root@nginx conf]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.90 chenxi.com www.cx.com
[root@nginx conf]# nginx -s reload
[root@nginx conf]# curl http://www.cx.com -I
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.15.12
Date: Sat, 08 Jun 2019 22:16:19 GMT
Content-Type: text/html
Content-Length: 146
Location: http://www.cx.com/redirect 默认返回的是你访问的域名加后面的redirect
Connection: keep-alive
调整配置文件
server {
server_name chenxi.com www.cx.com;
server_name_in_redirect on; 改成on
return 302 /redirect;
}
测试
[root@nginx conf]# nginx -s reload
[root@nginx conf]# curl http://www.cx.com -I
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.15.12
Date: Sat, 08 Jun 2019 22:19:27 GMT
Content-Type: text/html
Content-Length: 146
Location: http://chenxi.com/redirect 返回的是主域名跳转
Connection: keep-alive
其他用法
.chenxi.com可以匹配chenxi.com和*.chenxi.com
_匹配所有
“”匹配没有传递的Host头部
server匹配顺序
精确匹配
*.在前面的泛域名
*.在后面的泛域名
文件中顺序正则匹配的域名
default server
第一个listen指定的default
http 的11个阶段

realip模块可以获取真实客户端地址
如何拿到用户真实IP

拿到用户IP如何使用

默认不会编译到nginx中的, --with-http_realip_module 将模块编译到nginx中

模块指令的介绍
set_real_ip_from address | CIDR | unix:;
可用范围:http, server, location
默认值为空
表示从这个IP发来的请求从头部去取用户的IP;定义的是前端代理或者cdn地址
real_ip_header field | X-Real-IP | X-Forwarded-For | proxy_protocol; 定义要取得变量默认X-Real-IP
可用范围:http,server,location
real_ip_recursive on | off; 表示如过客户端IP与代理IP相同之间跳过
real_ip_recursive off; 默认
可用范围:http,server,location
修改配置文件查看效果
server{
server_name chenxi.com www.cx.com;
error_log logs/myerror.log debug;
set_real_ip_from 192.168.10.90;
real_ip_recursive off;
real_ip_header X-Forwarded-For;
location /{
return 200 "Client real ip : $remote_addr\n";
}
}
nginx -s reload
测试
[root@nginx conf]# curl -H "X-Forwarded-For: 1.1.1.1,192.168.10.90" chenxi.com
Client real ip : 192.168.10.90
修改配置文件开启real_ip_recursive on 查看效果
server{
server_name chenxi.com www.cx.com;
error_log logs/myerror.log debug;
set_real_ip_from 192.168.10.90;
real_ip_recursive on;
real_ip_header X-Forwarded-For;
location /{
return 200 "Client real ip : $remote_addr\n";
}
}
nginx -s reload
[root@nginx conf]# curl -H "X-Forwarded-For: 1.1.1.1,192.168.10.90" chenxi.com
Client real ip : 1.1.1.1 触发了动作使用之前的地址
官网介绍http://nginx.org/en/docs/http/ngx_http_realip_module.html#set_real_ip_from
http_rewrite_module 模块介绍
return 指令介绍


实例
server {
server_name haha.com;
listen 8080;
root html/;
error_page 404 /403.html;
#return 405;
location /{
#return 404 "find nothing!\n";
}
}
nginx -s reload 加载测试
[root@nginx html]# echo "sdddf" > 403.html
[root@nginx vhost]# curl http://haha.com:8080/aa.html
sdddf
修改配置文件
server {
server_name haha.com;
listen 8080;
root html/;
error_page 404 /403.html;
#return 405;
location /{
return 404 "find nothing!\n";
}
}
nginx -s reload 加载测试
[root@nginx vhost]# curl http://haha.com:8080/aa.html
find nothing!
修改配置
[root@nginx vhost]# vim test.conf
server {
server_name haha.com;
listen 8080;
root html/;
error_page 404 /403.html;
return 405;
location /{
return 404 "find nothing!\n";
}
}
[root@nginx conf]# nginx -s reload
[root@nginx vhost]# curl http://haha.com:8080/aa.html
<html>
<head><title>405 Not Allowed</title></head>
<body>
<center><h1>405 Not Allowed</h1></center>
<hr><center>nginx/1.15.12</center>
</body>
</html>
nginx之HTTP模块配置的更多相关文章
- Nginx使用SSL模块配置https
背景 开发微信小程序,需要https域名,因此使用Nginx的SSL模块配置https 步骤 一.去域名管理商(如腾讯云.阿里云等)申请CA证书 二.在Nginx中配置,一般情况下域名管理商会提供配置 ...
- nginx使用ssl模块配置支持HTTPS访问
默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译nginx时指定–with-http_ssl_module参数. 需求: 做一个网站域名为 www.localhost.cn 要求通过htt ...
- nginx使用ssl模块配置HTTPS支持
默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数,安装模块依赖于OpenSSL库和一些引用文件,通常这些文件并不在同一个软件包中.通常这 ...
- nginx使用ssl模块配置支持HTTPS访问【解决ssl错误】
默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译nginx时指定–with-http_ssl_module参数. 需求:做一个网站域名为 www.localhost.cn 要求通过http ...
- nginx使用ssl模块配置HTTPS支持 <转>
默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数,安装模块依赖于OpenSSL库和一些引用文件,通常这些文件并不在同一个软件包中.通常这 ...
- Nginx基础 - 常用模块配置
1.Nginx状态监控http_stub_status_module记录Nginx客户端基本访问状态信息 location /mystatus { stub_status on; access_log ...
- nginx使用ssl模块配置支持HTTPS访问,腾讯云申请免费证书
开始我尝试用 let's encrypt 让http 变 https 官方:https://github.com/certbot/certbot 参考:https://www.cnblogs.com/ ...
- Linux下安装php环境并且配置Nginx支持php-fpm模块
因为php安装需要编译,所以服务器应该保证gcc和g++环境的安装 首先释放安装包: tar -xvzf php-5.6.27.tar.gz cd php-5.6.27 接下来进行参数配置,配置前如果 ...
- Nginx访问限制模块limit_conn_zone 和limit_req_zone配置使用
nginx可以通过limit_conn_zone 和limit_req_zone两个组件来对客户端访问目录和文件的访问频率和次数进行限制,另外还可以善用进行服务安全加固,两个模块都能够对客户端访问进行 ...
随机推荐
- Redis在windows实现将数据缓存起来定时更新读取
实现接口的读取存放在内存中,实现了Web网站直接读取内存数据,大大的减少了访问接口带来的等待时间,这个功能是比较实用的 需要下载一下‘类库’及‘Redis-x64-3.2.100程序包’ 百度云材料下 ...
- .net实现IHttpModule接口顾虑器
这篇文章主要介绍了C#使用IHttpModule接口修改http输出的方法,涉及C#操作IHttpModule接口的相关技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了C#使用IHtt ...
- 在GitHub上上传项目(转载)
今天准备在GitHub第一次上传自己的项目,发现过程并不是太简单,在网上找了一个博客,写的很详细,结合着他的讲解成功上传了自己的项目. 结合着他的步骤和自己遇到的问题,做一个梳理,以便以后使用.(原博 ...
- Unity3D 自动添加Fbx Animation Event
http://blog.csdn.net/aa20274270/article/details/52528449 using UnityEngine; using System.Collections ...
- VMware Workstation “无法连接 MKS: 套接字连接尝试次数太多;正在放弃。” 解决方法【转】
今天和往常一样打开电脑,打开VMware Workstation,打开其中的一台虚拟机,以前都是这么打开没有问题,今天打开虚拟机突然提示“无法连接 MKS: 套接字连接尝试次数太多:正在放弃.”. 经 ...
- poj1837 Balance
Balance POJ - 1837 题目大意: 有一个天平,天平左右两边各有若干个钩子,总共有C个钩子,有G个钩码,求将钩码全部挂到钩子上使天平平衡的方法的总数. 其中可以把天枰看做一个以x轴0点 ...
- VlAN-9-存储VLAN配置
vlan和vtp配置可能存储在vlan.dat和运行配置中 对于vtp v3来说无论哪种模式正常和拓展范围的vlan都被存储在vlan.dat文件中,如果为透明或off,vlan配置也会出现在运行配置 ...
- ssis-oracle 数据流任务
[OLE DB 源 1 [16]] 错误: SSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER.对连接管理器“F360DB”的 A ...
- RabbitMQ使用教程(一)RabbitMQ环境安装配置及Hello World示例
你是否听说过或者使用过队列? 你是否听说过或者使用过消息队列? 你是否听说过或者使用过RabbitMQ? 提到这几个词,用过的人,也许觉得很简单,没用过的人,也许觉得很复杂,至少在我没使用消息队列之前 ...
- mysql导入sql文件错误#1044 - Access denied for user 'root'@'localhost'
在我的个人知识管理中,经常用到mysql数据库,wordpress搭建的worklog.搜索测试数据.我blog的测试环境等.我在自己的电脑上整了WAMP(Windows Apache MySQL P ...