您的位置:首页 > 运维架构 > Nginx

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

2018-01-13 21:36 225 查看
LNMP的nginx、php配置(下)
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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: