linux学习笔记32-LNMP的nginx、php配置(下)

LNMPnginxphp配置(下)

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.nginxrewrite应用

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&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;  

2nginx可以用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;}

cnginxrewrite规则与apache几乎一致,只是最后的flag标记不同,例如:

rewrite ^/feed/$ http://www.1.com last;

flag标记有:

last 相当于apache里的L标记,表示完成rewrite,不再匹配后面的规则

breaklast类似

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;会导致死循环;

4nginx 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;
}


10nginx代理

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目录下建立两个文件:

aservername:

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;
}
}

 

你可能感兴趣的:(linux笔记备存)