nginx处理请求过程:在请求收到后定位到配置文件中描述的相应 location,然后由 handler 生成 response,再由 filter 进行处理。所以模块开发,可以是 handler 模块开发,也可以是 filter 模块开发(当然还有其他类型的模块)。
常用操作:
启动:./sbin/nginx
停止:./sbin/nginx -s stop
./sbin/nginx -s quit
重载:./sbin/nginx -s reload
service nginx reload
检查配置文件是否正确:./sbin/nginx -t
配置结构:
... #全局块 events { #events块 ... } http #http块 { ... #http全局块 server #server块 { ... #server全局块 location [PATTERN] #location块 { ... } location [PATTERN] { ... } } server { ... } ... #http全局块 } 1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。 2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。 3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。 4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。 5、location块:配置请求的路由,以及各种页面的处理情况。
配置事例:
user worker_proccess 4; pid /run/nginx.pid; events{ worker_connections 768; multi_accept on; } http{ sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; gzip on; gzip_disable “msie6”; include /etc/nginx/conf.d/*.conf include /etc/nginx/sites-enabled/*; } conf.d/*.conf upstream gx.gaokao360.net{//upstream上游,server中的proxy_pass内容指向这里,名称可以自定义 server ip:port weight=5; //配置多个实现负载均衡 server ip:port max_fails=3 fail_timeout=30s; //默认weight=1,最大重试次数,默认值为1,重试间隔时间,默认间隔为10s } mime.types types{ } sites-enabled/* server{ listen 80; //监听80端口 server_name zuohao.online; //url error_log /var/log/nginx/zuohao.online.error.log; access_log /var/log/nginx/zuohao.online.access.log; location / { proxy_pass http://zuohao.online.net; } } server{ listem 80; server_name img.zuohao.online; error_log /var/log/nginx/img.zuohao.online.error.log; access_log /var/log/nginx/img.zuohao.online.access.log; location ~ .*\.(gif|jpg|jpeg|png|bmp){ root /data/upload/p_w_picpaths/; expires -1; } }
location正则表达式
~ 使用正则表达式,区分大小写
~*使用正则表达式,不区分大小写
$ 标志结尾
^ 标志开头
\ 转义字符,转义. * ?
^~ 优先匹配(完整路径)
location 匹配的优先级(来自实践总结中)
(location =) > (location 完整路径 >) >(location ^~ 路径) >(location ~* 正则) >(location 路径)
1.标识符“=”的location会最先进行匹配,如果请求uri匹配这个location,将对请求使用这个location的配置。
2.进行字符串匹配,如果匹配到的location有^~这个标识符,匹配停止返回这个location的配置。
3.按照配置文件中定义的顺序进行正则表达式匹配。最早匹配的location将返回里面的配置。
4.如果正则表达式能够匹配到请求的uri,将使用这个正则对应的location,如果没有,则使用第二条匹配的结果。
ps:
问:为什么location \.do${}会匹配http://www.test.com/index.do?xxx=xxx?
答:location 后边的参数是url,URL本身是不包含?后边的参数的
其他:
502 Bad Gateway
作为网关或代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
504 Gateway Timeout
作为网关或代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或辅助服务器(例如DNS)收到响应
正向代理服务器用来让局域网客户机接入外网以访问外网资源,反向代理服务器用来让外网的客户端接入局域网中的站点以访问站点中的资源。
正向代理服务器中,我们的角色是客户端,目的是访问外网的资源
反向代理服务器中,我们的角色是站点,目的是把站点的资源发布出去让其他客户端能够访问。
转载于:https://blog.51cto.com/zuohao1990/1893365