




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、nginx rewrite依赖于PCRE库,所以需要在linux系统中编译安装PCRE库。具体步骤如下:1.下载PCRE包首先去官网下载pcre的安装包如果通过FTP的方式,下载地址为:ftp:/ftp.csx.cam.ac.uk/pub/software/programming/pcre/如版本为8. 37,linux对应的安装包名称为:pcre-8. 37.tar.gz。1)tar-zxvfpcre-8. 37.tar.gz2)cd pcre-8. 373)./configure-enable-utf84)make5) makecheck6) makeinstall(ubuntu 如果不是
2、root用户需要用sudo执行)2.安装Ngingx例如nginx-1.8.1.tar.gz1)tar -zxvfnginx-1.8.1.tar.gz2)cdnginx-)./configure -prefix=/home/qianlinlai/nginx-1.8.1 -conf-path=/home/qianlinlai/nginx-1.8.1/ nginx.conf -without-http_memcached_module -with-pcre=/home/qianlinlai/pcre-8.37-with-http_stub_status_module -without
3、-http_gzip_module(根据实际需要增删相应模块 ssl gzip等需要单独下载后再配置)4)make5)make install3.配置nginx.conf主要参数:#user nobody;worker_processes 1;error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;events worker_connections 1024;http include mime.types; default_type
4、application/octet-stream; #log_format main $remote_addr - $remote_user $time_local $request # $status $body_bytes_sent $http_referer # $http_user_agent $http_x_forwarded_for; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server l
5、isten 80; server_name ; #charset koi8-r; #access_log logs/host.access.log main; location / proxy_pass :8888;/转发服务地址 对应tomcat端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Cookie $ht
6、tp_cookie;/转发http头信息,解决会话问题 如上则配置好了一个转发服务:访问http:/ 则会转发到本地8888端口的tomcat服务上。如果有多个服务且域名不同的请求,则在server外加入另外的配置文件,如include vhost/*.conf;则会加载vhost目录下所有conf文件:以加入pwiki服务为例local.conf:server listen 80; server_name xx.xxx.top; #charset koi8-r; #access_log logs/host.access.log main; #error_page 404 /404.html;
7、 # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html root html; location / root html; index index.php; # proxy the PHP scripts to Apache listening on :80 # #location .php$ # proxy_pass ; # # pass the PHP scri
8、pts to FastCGI server listening on :9000 # location .php$ root html; fastcgi_pass :9000;/通过fastcgi转发 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; 4.nginx命令nginx 启动、停止、重启命令nginx启动sudo /usr/local/nginx/nginx (nginx
9、二进制文件绝对路径,可以根据自己安装路径实际决定)nginx从容停止命令,等所有请求结束后关闭服务ps -ef |grep nginxkill -QUIT nginx主进程号nginx 快速停止命令,立刻关闭nginx进程ps -ef |grep nginxkill -TERM nginx主进程号如果以上命令不管用,可以强制停止kill -9 nginx主进程号重新加载配置修改了配置需要重新加载不需要停止再重启,直接nginx -s reload重新加载。5.nginx其他功能:1)加载静态资源,如js、css、图片等在server中配置location路径 location /static/
10、 root html; 所有以static开头的请求会重定向到html路径下,寻找static目录对应资源,减轻后端服务器压力,注意html为nginx根目录文件且static内所有文件必须通过chmod 755 -R static进行设置以支持访问权限,否则会出现403/404等错误。2)负载均衡nginx可以作为代理服务器,支持负载均衡功能,一般都需要向上游服务器的集群转发请求,这里的负载均衡是指选择一种策略,尽量把请求平均地分布到每一台上游服务器上。考虑到负载均衡以及会话保持的问题,建议如下配置:1. upstreamtomcat 2. ip_hash;3. server;4. serv
11、er;5. server;6. server;7. 8.9. location / 10. proxy_pass http:/tomcat;11. proxy_set_header Host $host;12. proxy_set_header X-Real-IP $remote_addr;13. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;14. proxy_set_header Cookie $http_cookie; 15. 注意:tomcat为upstream的名字,与location中proxy_pass对应
12、,如proxy_pass:http:/tomcat,如选择的是第一个server则访问http:/ 。通过ip_hash将同一ip地址请求转到同一台服务器上,避免再没有会话服务器时候出现会话不一致的情况,另外还可以指定权重将请求按权重转发到不同的服务器上,但是权重不能和ip_hash同时使用。其他主要参数如下: weight=number:设置向这台上游服务器转发的权重,默认为1。 max_fails=number:该选项与fail_timeout配合使用,指在fail_timeout时间段内,如果向当前的上游服务器转发失败次数超过number,则认为在当前的fail_timeout时间段内这
13、台上游服务器不可用。max_fails默认为1,如果设置为0,则表示不检查失败次数。 fail_timeout=time:fail_timeout表示该时间段内转发失败多少次后就认为上游服务器暂时不可用,用于优化反向代理功能。它与向上游服务器建立连接的超时时间,读取上游服务器的响应超时时间等完全无关。fail_timeout默认为10秒。 down:表示所在的上游服务器永久下线,只在使用ip_hash配置项时才有用。 backup:在使用ip_hash配置项时它是无效的。它表示所在的上游服务器只是备份服务器,只有在所有的非备份上游服务器都失效后,才会向所在的上游服务器转发请求。另外nginx还
14、可以通过rewrite重写url请求,本次没用到,随后在学习。附:1.nginx.conf配置详细说明:#运行用户user nobody;#启动进程,通常设置成和cpu的数量相等worker_processes1;#全局错误日志及PID文件#error_loglogs/error.log;#error_loglogs/error.lognotice;#error_loglogs/error.loginfo;#pidlogs/nginx.pid;#工作模式及连接数上限events #epoll是多路复用IO(I/O Multiplexing)中的一种方式,#仅用于linux2.6以上内核,可以大
15、大提高nginx的性能use epoll; #单个后台worker process进程的最大并发链接数worker_connections1024;# 并发总数是 worker_processes 和 worker_connections 的乘积# 即 max_clients = worker_processes * worker_connections# 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4为什么# 为什么上面反向代理要除以4,应该说是一个经验值# 根据以上条件,正常情况下的Nginx Ser
16、ver可以应付的最大连接数为:4 * 8000 = 32000# worker_connections 值的设置跟物理内存大小有关# 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数# 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右# 我们来看看360M内存的VPS可以打开的文件句柄数是多少:# $ cat /proc/sys/fs/file-max# 输出 34336# 32000 (location 完整路径) (location 路径) (location ,* 正则顺序) (location 部分起始路径)
17、 (/)上面的匹配结果按照上面的location写法,以下的匹配示例成立: / - config A精确完全匹配,即使/index.html也匹配不了 /downloads/download.html - config B匹配B以后,往下没有任何匹配,采用B /images/1.gif - configuration D匹配到F,往下匹配到D,停止往下 /images/abc/def - config D最长匹配到G,往下匹配D,停止往下你可以看到 任何以/images/开头的都会匹配到D并停止,FG写在这里是没有任何意义的,H是永远轮不到的,这里只是为了说明匹配顺序 /documents/d
18、ocument.html - config C匹配到C,往下没有任何匹配,采用C /documents/1.jpg - configuration E匹配到C,往下正则匹配到E /documents/Abc.jpg - config CC最长匹配到C,往下正则顺序匹配到CC,不会往下到E实际使用建议所以实际使用中,个人觉得至少有三个匹配规则定义,如下:#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。#这里是直接转发给后端应用服务器了,也可以是一个静态首页# 第一个必选规则location = / proxy_pass http:/tomcat:8080/inde
19、x# 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用location /static/ root /webroot/static/;location * .(gif|jpg|jpeg|png|css|js|ico)$ root /webroot/res/;#第三个规则就是通用规则,用来转发动态请求到后端应用服务器#非静态文件请求就默认是动态请求,自己根据实际把握#毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了location / proxy_pass http:/tomcat:8080/http
20、://book/chapter_02.html/en/docs/http/ngx_http_rewrite_module.htmlRewrite规则rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。rewrite只能放在server,location,if中,并且只能对域名后边的除去传递的参数外的字符串起作用,例如只对/a/we/index.php重写。语法rewrite regex replacement flag;如果相对域名或参数字符串起作用,可以使用全局
21、变量匹配,也可以使用proxy_pass反向代理。表明看rewrite和location功能有点像,都能实现跳转,主要区别在于rewrite是在同一域名内更改获取资源的路径,而location是对一类路径做控制访问或反向代理,可以proxy_pass到其他机器。很多情况下rewrite也会写在location里,它们的执行顺序是:1. 执行server块的rewrite指令2. 执行location匹配3. 执行选定的location中的rewrite指令如果其中某步URI被重写,则重新循环执行1-3,直到找到真实存在的文件;循环超过10次,则返回500 Internal Server Err
22、or错误。flag标志位 last: 相当于Apache的L标记,表示完成rewrite break: 停止执行当前虚拟主机的后续rewrite指令集 redirect: 返回302临时重定向,地址栏会显示跳转后的地址 permanent: 返回301永久重定向,地址栏会显示跳转后的地址因为301和302不能简单的只返回状态码,还必须有重定向的URL,这就是return指令无法返回301,302的原因了。这里 last 和 break 区别有点难以理解:1. last一般写在server和if中,而break一般使用在location中2. last不终止重写后的url匹配,即新的url会再从
23、server走一遍匹配流程,而break终止重写后的匹配3. break和last都能组织继续执行后面的rewrite指令if指令与全局变量if判断指令语法为if(condition).,对给定的条件condition进行判断。如果为真,大括号内的rewrite指令将被执行,if条件(conditon)可以是如下任何内容: 当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false 直接比较变量和内容时,使用=或!= 正则表达式匹配,*不区分大小写的匹配,!区分大小写的不匹配-f和!-f用来判断是否存在文件-d和!-d用来判断是否存在目录-e和!-e用来判断是否存在文件或目录-
24、x和!-x用来判断文件是否可执行例如:if ($http_user_agent MSIE) rewrite (.*)$ /msie/$1 break; /如果UA包含MSIE,rewrite请求到/msid/目录下if ($http_cookie * id=(;+)(?:;|$) set $id $1; /如果cookie匹配正则,设置变量$id等于正则引用部分if ($request_method = POST) return 405; /如果提交方法为POST,则返回状态405(Method not allowed)。return不能返回301,302if ($slow) limit_ra
25、te 10k; /限速,$slow可以通过 set 指令设置if (!-f $request_filename) break; proxy_pass ; /如果请求的文件名不存在,则反向代理到localhost 。这里的break也是停止rewrite检查if ($args post=140) rewrite permanent; /如果query string中包含post=140,永久重定向到location * .(gif|jpg|png|swf|flv)$ valid_referers none blocked ; if ($invalid_referer
26、) return 404; /防盗链全局变量下面是可以用作if判断的全局变量 $args: #这个变量等于请求行中的参数,同$query_string $content_length: 请求头中的Content-length字段。 $content_type: 请求头中的Content-Type字段。 $document_root: 当前请求在root指令中指定的值。 $host: 请求主机头字段,否则为服务器名称。 $http_user_agent: 客户端agent信息 $http_cookie: 客户端cookie信息 $limit_rate: 这个变量可以限制连接速率。 $reques
27、t_method: 客户端请求的动作,通常为GET或POST。 $remote_addr: 客户端的IP地址。 $remote_port: 客户端的端口。 $remote_user: 已经经过Auth Basic Module验证的用户名。 $request_filename: 当前请求的文件路径,由root或alias指令与URI请求生成。 $scheme: HTTP方法(如http,https)。 $server_protocol: 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。 $server_addr: 服务器地址,在完成一次系统调用后可以确定这个值。 $server_na
28、me: 服务器名称。 $server_port: 请求到达服务器的端口号。 $request_uri: 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。 $uri: 不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。 $document_uri: 与$uri相同。例:http:/localhost:88/test1/test2/test.php$host:localhost$server_port:88$request_uri:http:/localhost:88/test1/test2/test.php$documen
29、t_uri:/test1/test2/test.php$document_root:/var/www/html$request_filename:/var/www/html/test1/test2/test.php常用正则 .: 匹配除换行符以外的任意字符 ?: 重复0次或1次 +: 重复1次或更多次 *: 重复0次或更多次 d:匹配数字 : 匹配字符串的开始 $: 匹配字符串的介绍 n: 重复n次 n,: 重复n次或更多次 c: 匹配单个字符c a-z: 匹配a-z小写字母的任意一个小括号()之间匹配的内容,可以在后面通过$1来引用,$2表示的是前面第二个()里的内容。正则里面容易让人困惑的是转义特殊字符。rewrite实例例1:http # 定义
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025重庆三峡人寿保险股份有限公司招聘16人笔试历年参考题库附带答案详解
- 2025贵州六盘水市六枝特区锦黔农旅发展(集团)有限责任公司招聘工作人员笔试历年参考题库附带答案详解
- 2025西安庆安制冷设备股份有限公司招聘(7人)笔试历年参考题库附带答案详解
- 2025内蒙古自治区农牧业科学院招聘48人模拟试卷及一套参考答案详解
- 2025福建福清市诚烨电子有限公司招聘5人笔试历年参考题库附带答案详解
- 2025福建新华发行集团招聘笔试历年参考题库附带答案详解
- 2025福建厦门市翔安保安有限公司招聘员18人笔试历年参考题库附带答案详解
- 2025福州市建筑大数据技术有限公司招聘4人笔试历年参考题库附带答案详解
- 2025广东深圳市优才人力资源有限公司招聘综合网格员(派遣至布吉街道)拟聘人员笔试历年参考题库附带答案详解
- 2025内蒙古包头中心区建设投资运营管理有限公司面向社会招聘2人笔试历年参考题库附带答案详解
- (2025)学法用法考试题及答案
- 巴以冲突的原因
- 占用道路施工组织方案(3篇)
- 环境反应工程导论课件
- 马场建造设计方案
- 本币交易员考试题库
- 安徒生童话题目及答案
- 胃食管反流病的健康教育指导讲课件
- 小儿腹股沟疝麻醉
- 宜宾党校考试试题及答案
- 2025年安徽省农业职业技能大赛(水生物病害防治员)备赛试题库(含答案)
评论
0/150
提交评论