nginx 配置的server_name参数
nginx中的server_name指令主要用于配置基于名称虚拟主机.
一 匹配顺序,server_name指令在接到请求后的匹配顺序如下:
1、确切的server_name匹配,例如:
server {
listen ;
server_name www.sklinux.com sklinux.com;
...
}
2、以*通配符开始的最长字符串:
server {
listen ;
server_name *.sklinux.com;
...
}
3、以*通配符结束的最长字符串:
server {
listen 80;
server_name www.*;
...
}
注意: 通配符名字只可以在名字的起始处或结尾处包含一个星号,并且星号与其他字符之间用点分隔。所以,“www.*.example.org
”和“w*.example.org
”都是非法的。
有一种形 如“.example.org
”的特殊通配符,它可以既匹配确切的名字“example.org
”,又可以匹配一般的通配符名字“*.example.org
”。
4、匹配正则表达式:
server {
listen 80;
server_name ~^(?<www>.+)\.sklinux\.com$;
...
}
nginx将按照1,2,3,4顺序对server name进行匹配(而和配置段本身的排版顺序无关),只要有一项匹配以后就会停止搜索。
二。 server_name指令的正则表达式应用
server_name指令一项很实用的功能便是可以在使用正则表达式的捕获功能.nginx使用的正则表达式兼容PCRE。
为了使用正则表达式,虚拟主机名必须以波浪线“~”起始否则该名字会被认为是个确切的名字:
server_name ~^www\d+\.example\.net$;
如果表达式含星号,则会被认为是个通配符名字(而且很可能是一个非法的通配符名字)。不要忘记设置“^
”和“$
”锚点,
语法上它们不是必须的,但是逻辑上是的。同时需要注意的是,域 名中的点“.”需要用反斜线“\”转义。含有“{
”和“}
”的正则
表达式需要被引用,如:
server_name "~^(?<name>\w\d{1,3}+)\.example\.net$";
否则nginx就不能启动,错误提示是:
directive "server_name" is not terminated by ";" in ...
命名的正则表达式捕获组在后面可以作为变量使用:
server {
server_name ~^(www\.)?(?<domain>.+)$; location / {
root /sites/$domain;
}
}
PCRE使用下面语法支持命名捕获组:
?<name> 从PCRE-.0开始支持,兼容Perl .10语法
?'name' 从PCRE-.0开始支持,兼容Perl .10语法
?P<name> 从PCRE-.0开始支持,兼容Python语法
如果nginx不能启动,并显示错误信息:
pcre_compile() failed: unrecognized character after (?< in ...
说明PCRE版本太旧,应该尝试使用?P<name>
。捕获组也可以以数字方式引用:
server {
server_name ~^(www\.)?(.+)$; location / {
root /sites/$;
}
}
不过,这种用法只限于简单的情况(比如上面的例子),因为数字引用很容易被覆盖。
下面是2个具体的应用:
1. 在一个server块中配置多个站点
server
{
listen ;
server_name ~^(www\.)?(.+)$;
index index.php index.html;
root /data/wwwsite/$;
}
站点的主目录应该类似于下面的结构,这样就可以只使用一个server块来完成多个站点的配置。
/data/wwwsite/sklinux.com
/data/wwwsite/baidu.com
/data/wwwsite/sina.com
/data/wwwsite/google.com
本例中正则表达式捕获组创建了变量,普通的正则表达式捕获组可以创建$0、$1、…、$9这10个变量。$0表示原串,$1-$9表示第一到第九个匹配组的内容。
2. 在一个server块中为一个站点配置多个二级域名
实际网站目录结构中我们通常会为站点的二级域名独立创建一个目录,同样我们可以使用正则的捕获来实现在一个server块中配置多个二级域名:
server
{
listen ;
server_name ~^(.+)?\.sklinux\.com$;
index index.html;
if ($host = sklinux.com){
rewrite ^ http://www.sklinux.com permanent;
}
root /data/wwwsite/sklinux.com/$/;
}
站点的目录结构应该如下:
/data/wwwsite/sklinux.com/www/
/data/wwwsite/sklinux.com/nginx/
这样Root目录和目标HOST地址的对应关系如下:
http://www.sklinux.com <--> /data/wwwsite/sklinux.com/www/ http://nginx.sklinux.com <--> /data/wwwsite/sklinux.com/nginx/
后面if语句的作用是将sklinux.com的方位重定向到http://www.sklinux.com,这样既解决了网站的主目录访问,又可以增加seo中对http://www.sklinux.com的域名权重。
3.多个正则表达式
如果你在server_name中用了正则,而下面的location字段又使用了正则匹配,这样将无法使用$1,$2这样的引用,解决方法是通过set指令将其赋值给一个命名的变量:
server
{
listen ;
server_name ~^(.+)?\.sklinux\.com$;
set $www_root $;
root /data/wwwsite/sklinux.com/$www_root/;
location ~ .*\.php?$ {
fastcgi_pass 127.0.0.1:;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwsite/sklinux.com/$fastcgi_script_name;
include fastcgi_params;
}
}
nginx 配置的server_name参数的更多相关文章
- nginx 配置的server_name参数(转)
转自:http://www.sklinux.com/373 nginx中的server_name指令主要用于配置基于名称虚拟主机. 一 匹配顺序,server_name指令在接到请求后的匹配顺序如下: ...
- nginx配置一般优化参数
#user nobody; worker_processes 2; # CPU亲和力,worker_processes最多开启8个,注意写法 worker_cpu_affinity 01 10; wo ...
- nginx配置的server_name无法访问
问题: 我的nginx.conf配置文件中的server_name是这样子的,然后无法访问. 但是如果说server_name后面改成服务器的IP地址却是可以访问的. 解决方案: 在本机上(不是服务器 ...
- nginx配置文件结构
nginx配置文件结构 全局参数 配置系统全局参数如:worker_processes 工作子进程数量.error_log 错误日志路径.pid 进程IDEvent一般是配置nginx工作模式及连 ...
- nginx响应高并发参数配置
一.一般来说nginx 配置文件中对优化比较有作用的为以下几项: 1. worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu ...
- 【nginx】nginx配置文件结构,内置变量及参数调优
Nginx的配置文件是一个纯文本文件,它一般位于Nginx安装目录的conf目录下,整个配置文件是以block的形式组织的.每个block一般以一个大括号“{”来表示.block 可以分为几个层次,整 ...
- Nginx 配置及参数详解
Nginx 配置及参数详解 Nginx Location 指令语法 如下就是常用的 location 配置的语法格式,其中modifier是可选的,location_match就是制定 URI 应该去 ...
- Nginx 配置参数中文说明
Nginx配置参数中文详细说明: #定义Nginx运行的用户和用户组 user www www; # #nginx进程数,建议设置为等于CPU总核心数. worker_processes ; # #全 ...
- Nginx 笔记(四)nginx 原理与优化参数配置 与 nginx 搭建高可用集群
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.nginx 原理与优化参数配置 master-workers 的机制的好处 首先,对于每个 ...
随机推荐
- 在notepad++中编辑时光标消失不见
在notepad++进行编辑时,会不知道的情况下,鼠标光标由竖线变成了下划线,如图 解决方法很简单,是点击”insert“键或者”ins“键,即可改变光标形状.
- JavaScript之变量提升
变量提升:在JavaScript中,页面加载时,会将用var声明的变量提升到作用域的最前端,只能提升声明,不能提升赋值 如果变量先赋值再使用,可以省略关键字var 如果先使用变量,再赋值,不可以省略关 ...
- 关于在centos下安装python3.7.0以上版本时报错ModuleNotFoundError: No module named '_ctypes'的解决办法
3.7版本需要一个新的包libffi-devel,安装此包之后再次进行编译安装即可. #yum install libffi-devel -y#make install若在安装前移除了/usr/bin ...
- phpmyadmin教程
phpmyadmin教程 管理页进入phpmyadmin 打开C:\wamp\apps\phpmyadmin3.5.1下的配置文件:config.inc 修改密码创建与修改数据库.数据表 字段类型 I ...
- [openssl] 使用openssl生成证书
使用openssl生成带域名的证书,SAN,subjectAltName, subject alternative name, DNS. 1. 生成私钥 openssl genrsa - 2. 编写配 ...
- python统计代码总行数(代码行、空行、注释行)
我们在工作或学习代码的过程中,经常会想知道自己写了多少行代码,今天在项目环境写了个脚本统计了项目代码的数量. 功能: 1.统计代码总行数 2.统计空行数 3.统计注释行数 # coding=utf-8 ...
- 3.XPath
使用XPath可以在不遍历xml文档的情况下选择具体节点. 转自https://www.cnblogs.com/vaevvaev/p/6928201.html XPath可以快速定位到Xml中的节点或 ...
- 只有tcp6
为什么 netstat 对某些服务只显示了 tcp6 监听端口 tags: linux 最近偶尔发现一个比较奇怪的现象,netstat 查看监听的服务端口时,却只显示了 tcp6 的监控, 但是服务明 ...
- 移动App性能评测与优化-Android内存测试 ,DVM原理
常见的测试方法包括Monkey/UIAutomator类的常规压力测试,大数据/操作的峰值压力测试,长时间运行的稳定性测试等. 前提: 测试准备:版本是纯净版本,不应该附加多余的log和调试用组件. ...
- vue slot 插槽详解
插槽含义:就是引入子组件后,在插入子组件元素中添加信息或者标签,使得子组件的指定位置插入信息或者标签 插槽有三种:默认插槽.具名插槽.作用域插槽,由于vue2.6.0后对插槽进行修改,但是兼容2.6. ...