nginx配置访问控制、rewrite应用、nginx代理

一、访问控制

限制只让某个ip访问:

allow 192.168.1.100;

deny all;

限制只有本地地址可以访问,白名单;

allow 127.0.0.1;

deny all;

拒绝本地访问,黑名单:

deny 127.0.0.1;

allow all;

deny all 直接拒绝所有,下面的allow就不生效了。

[[email protected] vhosts]# vi default.conf
server
{
    listen 80 default_server;
    server_name localhost;
    index index.html index.htm index.php;
    root /usr/local/nginx/html;
    deny all;
    allow 2.2.2.2;
}
[[email protected] vhosts]# curl -x127.0.0.1:80  192.168.20.30/index.html -I
HTTP/1.1 403 Forbidden
Server: nginx/1.6.2
Date: Fri, 15 May 2015 08:46:05 GMT
Content-Type: text/html
Content-Length: 168
Connection: keep-alive


禁止某个IP或者IP段访问站点的设置方法:

1、首先建立下面的配置文件放在nginx的conf目录下面,命名为deny.ip

# cat /usr/local/nginx/conf/deny.ip
deny 192.168.20.10;
deny 192.168.20.11;
deny 192.168.10.0/24;

2、在nginx的配置文件nginx.conf中加入:include deny.ip;

3、重启一下nginx的服务:/usr/local/nginx/sbin/nginx -s reload 就可以生效了。

deny.ip 的格式中也可以用deny all; 如果你想实现这样的应用,除了几个IP外,其他全部拒绝,

allow 1.1.1.1;

allow 1.1.1.2;

deny all;

针对目录限制php解析:

location ~ .*(diy|template|attachments|forumdata|attachment|image/.*\.php$ {

deny all;

}

根据 user_agent 控制客户端访问

location / {

if ($http_user_agent ~ ‘bingbot/2.0|MJ12bot/v1.4.2|Spider/3.0|YoudaoBot|Tomato|Gecko/20100315‘){

return 403;

}

}

实验:限定IE7.0 和 curl 不能访问;IE8.0可以正常打开;

location / {

if ($http_user_agent ~ ‘MSIE 7.0|curl‘){

return 403;

}

}

curl -A 代表浏览器标识agent;模拟浏览器标识;测试包含bingbot/2.0,MSIE 7.0,curl的返回值为403;

[[email protected] vhosts]# curl -x127.0.0.1:80 -A "aabingbot/2.0ss" www.111.com -I
HTTP/1.1 403 Forbidden
Server: nginx/1.6.2
Date: Fri, 15 May 2015 21:09:35 GMT
Content-Type: text/html
Content-Length: 168
Connection: keep-alive
[[email protected] vhosts]# curl -x127.0.0.1:80 -A "MSIE 7.0aa"  www.111.com -I
HTTP/1.1 403 Forbidden
Server: nginx/1.6.2
Date: Fri, 15 May 2015 21:13:50 GMT
Content-Type: text/html
Content-Length: 570
Connection: keep-alive
[[email protected] vhosts]# curl -x127.0.0.1:80  192.168.20.30/index.html -I
HTTP/1.1 403 Forbidden
Server: nginx/1.6.2
Date: Fri, 15 May 2015 09:15:27 GMT
Content-Type: text/html
Content-Length: 168
Connection: keep-alive

二、nginx的rewrite应用

现在有这样的的需求,访问 www.abc.com  请求到 www.abc.com/abc/

在nginx虚拟主机配置文件中加入 :

if ($document_uri !~ ‘abc‘)

{

rewrite ^/(.*)$ http://www.abc.com/abc/$1 permanent;

}

而不是单独加一句rewrite ^/(.*)$ http://www.abc.com/abc/$1 permanent;

如果只加rewrite 规则,而不限定条件,那么会造成死循环。

会访问到http://www.abc.com/abc/abc/abc/abc/....

实验测试,只加一行rewrite规则,redirect 302 临时重定向;

[[email protected] vhosts]# cat 111.conf 
server
{
    listen 80;
    server_name www.aaa.com aaa.com;
    index index.html index.htm index.php;
    root /data/www2;
 
    rewrite ^/(.*)$ /aaa/$1 redirect;
   
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/tmp/php-fcgi-www2.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/www2$fastcgi_script_name;
    }
}

使用curl测试跳转到http://www.aaa.com/aaa/asdfasdfa

[[email protected] vhosts]# curl -x127.0.0.1:80  www.aaa.com/asdfasdfa -I
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.6.2
Date: Fri, 15 May 2015 09:54:10 GMT
Content-Type: text/html
Content-Length: 160
Location: 
http://www.aaa.com/aaa/asdfasdfa
Connection: keep-alive

 浏览器输入http://www.aaa.com/asdfasdfa 出现死循环网址;

加入if判断,域名不匹配aaa的时候跳转到aaa地址下;浏览器访问跳转正确,出现404错误是我们做实验没有这个目录;
    if ($document_uri !~ ‘aaa‘)

{

rewrite ^/(.*)$ /aaa/$1 redirect;

}

三、nginx代理配置

/conf/vhosts/目录下,新建一个proxy.conf 写入下面的内容:

[[email protected] vhosts]# cat proxy.conf
server {
            listen 80;
            server_name  
            location / {
                proxy_pass      http://180.97.33.108/;
                proxy_set_header Host   $host;
                proxy_set_header X-Real-IP      $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }
        }

代理baidu.com,proxy_pass填写baidu的ip地址;

#curl -x192.168.20.30:80  www.baidu.com  使用本地解析baidu.com 就可以访问百度的主页;

dig命令查看baidu的别名和对应的ip地址;

#dig www.baidu.com

;; ANSWER SECTION:
www.baidu.com. 1065 IN CNAME www.a.shifen.com.
www.a.shifen.com. 183 IN A 180.97.33.108
www.a.shifen.com. 183 IN A 180.97.33.107

如果代理的机器有多台,可以实现负载均衡。bbb为自定义的内容;

upstream bbb
{
            server  180.97.33.108:80;
            server  180.97.33.107:80;
}
server {
        listen 80;
        server_name  
        location / {
                proxy_pass      http://bbb/;
                proxy_set_header Host   $host;
                proxy_set_header X-Real-IP      $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}


时间: 2024-11-04 18:56:54

nginx配置访问控制、rewrite应用、nginx代理的相关文章

Nginx配置的rewrite编写时last与break的区别详解

rewite 1. server块中的rewrite: 在server块下,会优先执行rewrite部分,然后才会去匹配location块 server中的rewrite break和last没什么区别,都会去匹配location,所以没必要用last再发起新的请求,可以留空. 2. location中的rewirte: 不写last和break -    那么流程就是依次执行这些rewrite 1. rewrite break -        url重写后,直接使用当前资源,不再执行loca

nginx 配置 ThinkPHP Rewrite

server { listen 80; server_name www.funsion.com; root /www/web/funsion; index index.php; location / { # 不带www的时候,自动加上www if ($host !~ '^www') { rewrite "^/(.*)$" http://www.$host/$1 permanent; } if (!-e $request_filename){ rewrite ^/(.*)$ /index

nginx配置ThinkPHP Rewrite

server { listen 80; server_name www.funsion.com; root /www/web/funsion; index index.php; # 禁止访问应用目录中的php文件 location ~* ^/application/.+\.php$ { #此目录下的.html要允许访问,因为静态html缓存也是在这个目录下生成 return 403; } location ~* ^/application/Tpl/.+\.html$ { return 403;

Nginx中的Rewrite的重定向配置与实践

阅读目录 一:理解地址重写 与 地址转发的含义. 二:理解 Rewrite指令 使用 三:理解if指令 四:理解防盗链及nginx配置 简介:Rewrite是Nginx服务器提供的一个重要的功能,它可以实现URL重定向功能. 回到顶部 一:理解地址重写 与 地址转发的含义. 地址重写与地址转发是两个不同的概念. 地址重写 是为了实现地址的标准化,比如我们可以在地址栏中中输入 www.baidu.com. 我们也可以输入 www.baidu.cn. 最后都会被重写到 www.baidu.com 上

nginx配置优化+负载均衡+动静分离详解

nginx配置如下: #指定nginx进程运行用户以及用户组user www www;#nginx要开启的进程数为8worker_processes 8;#全局错误日志文件#debug输出日志最为详细,而crit输出日志最少/var/log目录是linux下的日志存放目录error_log /var/log/nginx/nginx_error.log crit;#指定进程id的存储位置pid /var/run/nginx.pid;#绑定worker进程和CPU,linux内核2.4以上可用wor

nginx配置文件结构1

nginx配置文件结构 main: user nginx;        进程发起的用户名     worker_processes auto;        进程数量auto为物理核心数量 error_log /var/log/nginx/error.log; 错误日志位置 pid /run/nginx.pid;                   主进程文件号的文件位置      include /usr/share/nginx/modules/*.conf;    启动的模块 worker

thinkphp nginx php-fpm url rewrite 导致 404 错误

thinkphp nginx php-fpm url rewrite 导致 404 错误 之前thinkphp的系统部署在apache上,考虑到在并发性能nginx比apache强悍得多,所以在centos上以 nginx+php-fpm模式重新部署了thinkphp系统,结果发现诸如 1 /index.php/home/user/verify 此类的url nginx会报404错误,但是改成 1 /index.php?s=/home/user/verify 之后却能够访问,这说明前一种url

nginx配置学习文章

partOne 自我释义部分 我的是阿里云的ubuntu *******实际上感觉这里是基本配置,很用不到*********#定义其用户或用户组user www-data;#nginx的进程数,应当为cpu总核数,每个cpu处理一个线程worker_processes 4;#进程文件的位置pid /run/nginx.pid; #工作模式(有很多,这里没有展现)和链接上限,由于是多种配置, 所以啊,大括号表示多重属性events{#单个进程的最大连接处(=进程数*连接数)worker_conne

nginx配置一、二级域名、多域名对应(api接口、前端网站、后台管理网站)

前提:安装好nginx,如果已经启动nginx,先停止,命令: ./usr/local/nginx/sbin/nginx -s stop 修改nginx配置 vi /usr/local/nginx/conf/nginx.conf 配置好以后的nginx.conf文件内容: #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/er