Nginx判断不同的域名指向不同的root路径实例

一 应用场景描述

应开发同事需求,需要在开发环境的Nginx能够根据不同的域名使用不同的root路径。

例如如果域名是linuxidc4.linuxidc.com,就使用root路径为/data/public/linuxidc4

linuxidc5.linuxidc.com,就使用root路径为/data/public/linuxidc5

linuxidc6.linuxidc.com,就是用root路径为/data/public/linuxidc6

二 解决方法

 代码如下 复制代码
server
{
        listen      80;
        server_name *.linuxidc.com;
 
        set $linuxidc_name linuxidc4;
 
        if ($host ~ "linuxidc5")
        {
          set $linuxidc_name linuxidc5;
        }
 
        if ($host ~ "linuxidc6")
        {
          set $linuxidc_name linuxidc6;
        }
 
        root        /data/public/$linuxidc_name/;
 
        client_max_body_size 5m;
 
        autoindex off;
        location / {
            if (!-e $request_filename){
              rewrite /(.*) /index.php last;
                              }
            index index.php;
            autoindex off;
        }
 
        location ~ \.php$ {
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
            include        fastcgi_params;
        }
 
}

这里设置变量$linuxidc_name,然后在root路径中使用这个变量

三 相关Nginx指令介绍

1.set指令
用于定义一个变量,并为变量赋值
作用范围为if,location,server

如以上的
set $linuxidc_name linuxidc4;

2.if指令
if(condition) {...}
作用范围为
如:
if ($host ~ "linuxidc-taiwan-5")
        {
          set $linuxidc_name linuxidc5;
        }

if指令用于检查一个条件是否符合,如果条件符合,则执行大括号内的内容。if指令不支持嵌套,不支持多个&&或||

可以指定的条件为:
1)变量名
2)变量比较可以使用 =(等于)和!=(不等于)
3)正则表达式匹配可以使用 ~(区分大小写匹配)和 ~* (不区分大小写匹配)
  !~ 和 !~* 则表示不匹配
4)-f和!-f 用来判断文件是否存在
5) -d和!-d 用来判断目录是否存在
6) -e和!-e 用来判断文件或目录是否存在
7)-x和!-x 用来判断文件是否可以执行

3)Nginx内置变量
$host                            请求的主机名

$request_filename                    请求的文件名

4)rewrite指令
rewrite regex replacement flag;
用来重定向URL

if (!-e $request_filename){
              rewrite /(.*) /index.php last;
              }

rewrite最后一项为标记位,Nginx支持的标记为有:
last          表示完成rewrite
permanent      返回301永久重定向,浏览器地址栏会显示跳转后的URL
break        本条规则匹配完成后,终止其他规则的匹配

redirect        返回302临时重定向

 

last和break完成URL的重定向,浏览器上的地址不会变,但在服务器端上的位置发生了变化。permanent和redirect用来实现URL跳转,浏览器地址栏会显示跳转后的URL。

使用alias指令时必须使用last指令,使用proxy_pass指令时必须使用break指令

时间: 2024-12-03 20:32:09

Nginx判断不同的域名指向不同的root路径实例的相关文章

关闭nginx空主机头 防止nginx空主机头及恶意域名指向_nginx

nginx的默认配置中的虚拟主机允许用户通过IP访问,或者通过未设置的域名访问(比如有人恶意把他自己的域名指向了你的ip) 这是因为默认配置中的server区域里有这一行:listen 80 default; 后面的default参数表示这个是默认虚拟主机,接受所有指向过来的域名 比如别人通过ip或者未知域名访问你的网站的时候,你希望禁止显示任何有效内容,可以给他返回500. server { listen 80 default; server_name _; return 500; } 你也可

主页-多个域名指向同一ip,主域名设置的方法

问题描述 多个域名指向同一ip,主域名设置的方法 详细描述:本人做了一个个人网站,已经通过工信部备案. 备案中使用的主域名是A(代称), 在备案中还有了B,C两个域名. 现在已经将A解析到了我的网站.开发环境:使用阿里云的集成开发环境,阿里云+WP套件,域名解析是直接用阿里云 自带的解析 问题: 1 如何将B,C两个域名也指向A域名? 即在浏览器中输入BC的域名地址,会统一跳转到A,再访问网站? -阿里云自带的解析系统都是直接解析到IP地址的. 2 我发现了有一家我不认识的公司,将他们的一个域名

网站多域名指向存在的问题

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 最近在seo网站的时候遇见一个比较棘手的问题,那就是易含商务网站在做完之后,正式运营网站了之后!他们对网站进行了一个处理,那就是把以前很多丢弃掉的域名全部指向到现在的这个新站,当然这个里面不缺乏一些权重高的站,因为都是几年的米了,所以相对来说这样对我的新站有一定的威胁,毕竟老站本身的域名历史,网站内容,都有了一定的基础!一问为什么这样做,他们

nginx主机禁止未绑定域名的访问

在nginx的配置文件nginx.conf中增加下面一个server段就可以了.  代码如下 复制代码 server {     listen       80  default_server;     server_name  _;     return       404; } 或 server {     listen       80  default_server;     server_name  _;     return       444; } nginx的虚拟主机通过HTTP

Nginx绑定域名 nginx绑定多个域名?

Server 名称使用 "server_name" 指令来定义,并决定用哪一个 server 区块来处理请求 一.每个域名一个文件的写法 首先打开nginx域名配置文件存放目录:/usr/local/nginx/conf/servers ,如要绑定域名 www.111cn.net 则在此目录建一个文件:www.111cn.net.conf 然后在此文件中写规则,如:  代码如下 复制代码 server { listen       80; server_name www.webzhis

多域名指向网站优化解决方案

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   如果你的网站有两个以上的域名,那你就要注意了,比如,有两个域名 www.ithov.com和www.ithov.net 同时指向你的网站.如果你有两个或更多域名同时指向同一个网站,搜索引擎可能会认为这是网站或网页复制,搜索引擎极有可能把其中一个URL收录,而另一个 URL被列为复制站点. 如果站点是复制站点,搜索引擎认为这个网站有作弊的嫌疑,对网站的排名有很大的

Oray如何将我的域名指向我购买空间?

您只需要设置域名A记录指向您的空间服务器IP地址,即可完成域名指向. 如何设置A记录: 新版域名管理平台 "我的控制台"-->"产品管理"-->"域名管理"-->选中需要设置记录的域名进入域名管理平台-->域名解析设置,单击需要设置A记录的子域名,在设置预览中下拉选择"A记录"即可进入设置界面填入空间对应的IP地址后点击"+",这样就完成了域名指向操作. 旧版域名管理平台 "

linux中apache配置两个域名指向同一个ip地址不成功

问题描述 linux中apache配置两个域名指向同一个ip地址不成功 两个域名解析完毕,在linux服务器中配置apache文件后有一个域名不成功.测试过解析没问题,将有问题的域名指向其它有域名的服务器发现可用~望求高手出手帮忙~ 解决方案 看看这个 解决方案二: 看看这个

发布-window服务器如何用nginx实现2个域名分别对应二个项目

问题描述 window服务器如何用nginx实现2个域名分别对应二个项目 1.window服务器绑定了二个域名www.test.combbs.test.com. 现有2个tomcat发布项目分别是http://localhosthttp://localhost:8081/project现在用nginx想实现www.test.com就访问http://localhostbbs.test.com就访问http://localhost:8081/project.我用了nginx1.8配置,却一直不成功