linux学习笔记32-LNMP的nginx、php配置(下)
2018-01-13 21:36
225 查看
LNMP的nginx、php配置(下)
8、访问控制
编辑对应服务器配置文件
(1)限制某个ip访问:
在进行限制匹配时,满足第一个deny条件,就直接抛弃ip了,所以要注意顺序,如果顺序搞反,就会失去限制限制效果,以为所有ip都能匹配allow
all,然后就不再匹配后面的deny了;
(2)只允许某个ip访问:
在进行限制匹配时,满足第二个allow条件,就直放行ip,不在进行后面的匹配,所以要注意顺序;
(3)针对某个目录进行访问限制
(4)针对某些目录禁止解析php
(5)根据user_agent(浏览器标识)控制,带有限制标识的浏览器会被限制访问
9.nginx的rewrite应用
(1)当用户访问一些不存在或者错误的网页时,按照一定规则跳转到指定网页,而不是错误页,下面是伪静态rewrite规则模板:
(2)nginx可以用if进行条件匹配,例如:
a、正则表达式匹配,其中:
~ 是区分大小写匹配
~* 是不区分大小写匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配
b、文件及目录匹配,其中:
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e
用来判断是否存在文件或目录
-x和!-x 用来判断文件是否可以执行
例如:
8、访问控制
编辑对应服务器配置文件
(1)限制某个ip访问:
deny 192.168.1.104; allow all;
在进行限制匹配时,满足第一个deny条件,就直接抛弃ip了,所以要注意顺序,如果顺序搞反,就会失去限制限制效果,以为所有ip都能匹配allow
all,然后就不再匹配后面的deny了;
(2)只允许某个ip访问:
allow 127.0.0.1; allow 192.168.1.104; deny all;
在进行限制匹配时,满足第二个allow条件,就直放行ip,不在进行后面的匹配,所以要注意顺序;
(3)针对某个目录进行访问限制
location /uc_server/{ allow 127.0.0.1; allow 192.168.1.104; deny all; }
(4)针对某些目录禁止解析php
location ~ .*(diy|template|attachments|forumdata|attachment|image)/.*\.php$ { deny all; }
(5)根据user_agent(浏览器标识)控制,带有限制标识的浏览器会被限制访问
if ($http_user_agent ~ 'bingbot/2.0|MJ12bot/v1.4.2|Spider/3.0/YoudaoBot|Tomato|Gecko/20100315') { return 403; }
9.nginx的rewrite应用
(1)当用户访问一些不存在或者错误的网页时,按照一定规则跳转到指定网页,而不是错误页,下面是伪静态rewrite规则模板:
rewrite ^([^\.]*)/topic-(.+)\.html$ $1/portal.php?mod=topic&topic=$2 last; rewrite ^([^\.]*)/forum-(\w+)-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3 last; rewrite ^([^\.]*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=viewthread& b2de amp;tid=$2&extra=page%3D$4&page=$3 last; rewrite ^([^\.]*)/group-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=group&fid=$2&page=$3 last; rewrite ^([^\.]*)/space-(username|uid)-(.+)\.html$ $1/home.php?mod=space&$2=$3 last; rewrite ^([^\.]*)/(fid|tid)-([0-9]+)\.html$ $1/index.php?action=$2&value=$3 last;
(2)nginx可以用if进行条件匹配,例如:
if($htttp_user_agent ~ MSIE) {rewrite ^(.*)$ /msie/$1 break;}
a、正则表达式匹配,其中:
~ 是区分大小写匹配
~* 是不区分大小写匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配
b、文件及目录匹配,其中:
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e
用来判断是否存在文件或目录
-x和!-x 用来判断文件是否可以执行
例如:
if(!-f $request_filename {proxy_pass http://127.0.0.1;}[/code]
c、nginx的rewrite规则与apache几乎一致,只是最后的flag标记不同,例如:rewrite ^/feed/$ http://www.1.com last;
flag标记有:
last 相当于apache里的L标记,表示完成rewrite,不再匹配后面的规则
break与last类似
redirect 返回302临时重定向
permanent 返回301永久重定向
Wordpress的重定向规则:if(!-e $request_filename) {rewrite ^/(index|atom|rsd)\.xml$ http://www.1.com last;rewrite ^([_0-9a-zA-Z-]+)?(/wp-.*) $2 last;rewrite ^([_0-9a-zA-Z-]+)?(/.*\.php)$ $2 last;rewrite ^ /index.php last; }
(3)$document_uri表示访问的url
现在要求访问www.1.com
请求到www.1.com/1/
在nginx配置文件中加入:if($document_uri !~ '1') { rewrite ^/(.*) http://www.1.com/1/$1 permanent; }
单独加rewrite ^/(.*) http://www.1.com/1/$1 permanent;会导致死循环;
(4)nginx rewrite不支持if嵌套也不支持逻辑或、并,对于复杂功能的实现,需要借助标记功能实现:
例如,要求url以/abc/开头的请求,且user_agent带有ie6或者firefox关键词的请求禁止访问:set $rule 0; if($document_uri ~ '^/abc/') { set $rule "{rule}1"; } if($http_user_agent ~* 'ie6|firefox' ) { set $rule "{rule}2"; } if($rule = "012") { deny all; }
10、nginx代理
(1)vi /usr/local/nginx/conf/vhosts/proxy.conf
vi /usr/local/nginx/conf/vhosts/proxy.conf
(2)对于多个后台服务器的:upstream bbb { server 2.2.2.1:80 weight=100; server 2.2.2.2:80 weight=10; } server{ listen 80; server_name www.baidu.com; location /{ proxy_pass http://bbb/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarder-For $proxy_add_x_forwarder_for; } access_log /home/logs/aaa_access.log combined; }
(3)代理一个服务器上所有域名
在vhosts目录下建立两个文件:
a、servername:server_name www.1.com www.2.com www.3.com... ;
b、虚拟主机配置文件:server{ listen 80; include vhosts/servername location /{ proxy_pass http://bbb/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarder-For $proxy_add_x_forwarder_for; } access_log /home/logs/aaa_access.log combined; }
(4)根据文件目录来进行代理
需求:当请求目录为/aaa/则把请求发送到机器a,当请求目录/bbb/则把请求发送到机器b,除了目录/aaa/与目录/bbb/外,其他的请求发送到机器b
nginx配置文件内容为:upstream aaa.com { server 192.168.111.6; } upstream bbb.com { server 192.168.111.20; } server { listen 80; server_name li.com; location /aaa/ { proxy_pass http://aaa.com/aaa/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarder-For $proxy_add_x_forwarder_for; } location /bbb/ { proxy_pass http://bbb.com/bbb/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarder-For $proxy_add_x_forwarder_for; } location / { proxy_pass http://bbb.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarder-For $proxy_add_x_forwarder_for; } }
(5)根据url来进行代理
要求:根据不同的请求使用一台nginx代理四台apache
nginx配置如下:upstream aa.com { server 192.168.111.6; server 192.168.111.7; } upstream bb.com { server 192.168.111.20; server 192.168.111.21; } server { listen 80; server_name www.abc.com; location ~ aa.php { proxy_pass http://aa.com/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarder-For $proxy_add_x_forwarder_for; } location ~ bb.php { proxy_pass http://bb.com/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarder-For $proxy_add_x_forwarder_for; } }
相关文章推荐
- LNMP(linux+nginx+mysql+php)服务器环境配置
- docker-compose.yml编排LNMP,php找不到文件,注意nginx配置文件
- LNMP服务器环境配置 (linux+nginx+mysql+php)
- LNMP(linux+nginx+mysql+php)服务器环境配置
- LNMP(linux+nginx+mysql+php)服务器环境配置
- LNMP(linux+nginx+mysql+php)服务器环境配置
- LNMP(linux+nginx+mysql+php)服务器环境配置
- Debian 6.0.4安装配置lnmp(Nginx+MySQL+PHP)
- LNMP-Nginx与PHP配置(二)
- LNMP(linux+nginx+mysql+php)源码安装及协调配置测试笔记
- LNMP服务器环境配置 (linux+nginx+mysql+php)
- LNMP(linux+nginx+mysql+php)服务器环境配置
- centos6.6配置LNMP(linux+nginx+mysql+php)
- LNMP(linux+nginx+mysql+php)服务器环境配置
- lnmp 一键安装包 nginx配置tp5 phpinfo模式 隐藏index.php
- LNMP安装配置-linux Nginx/Mysql/Php/Phpmyadmin(CentOS vps)
- 搭建LNMP(linux+nginx+mysql+php)服务器环境配置实例教程
- ubuntu15.10配置LNMP(linux+nginx+mysql+php)
- LNMP(linux+nginx+mysql+php)服务器环境配置
- LNMP(linux+nginx+mysql+php)服务器环境配置