Nginx中的server_name指令主要用于配置基于名称的虚拟主机,server_name指令在接到请求后的匹配顺序分别为:
1、准确的server_name匹配,例如:
server {
listen 80;
server_name domain.com www.domain.com;
...
}
2、以*通配符开始的字符串:
server {
listen 80;
server_name *.domain.com;
...
}
3、以*通配符结束的字符串:
server {
listen 80;
server_name www.*;
...
}
4、匹配正则表达式:
server {
listen 80;
server_name ~^(?.+)\.domain\.com$;
...
}
nginx将按照1,2,3,4的顺序对server name进行匹配,只有有一项匹配以后就会停止搜索,所以我们在使用这个指令的时候一定要分清楚它的匹配顺序(类似于location指令)。
server_name指令一项很实用的功能便是可以在使用正则表达式的捕获功能,这样可以尽量精简配置文件,毕竟太长的配置文件日常维护也很不方便。下面是2个具体的应用:
1、在一个server块中配置多个站点:
server
{
listen 80;
server_name ~^(www\.)?(.+)$;
index index.php index.html;
root /data/wwwsite/$2;
}
站点的主目录应该类似于这样的结构:
/data/wwwsite/domain.com
/data/wwwsite/nginx.org
/data/wwwsite/baidu.com
/data/wwwsite/google.com
这样就可以只使用一个server块来完成多个站点的配置。
2、在一个server块中为一个站点配置多个二级域名。
实际网站目录结构中我们通常会为站点的二级域名独立创建一个目录,同样我们可以使用正则的捕获来实现在一个server块中配置多个二级域名:
server
{
listen 80;
server_name ~^(.+)?\.domain\.com$;
index index.html;
if ($host = domain.com){
rewrite ^ http://www.domain.com permanent;
}
root /data/wwwsite/domain.com/$1/;
}
站点的目录结构应该如下:
/data/wwwsite/domain.com/www/
/data/wwwsite/domain
.com/nginx/
这样访问www.domain.com时root目录为/data/wwwsite/domain.com/www/,nginx.domain.com时为/data/wwwsite/domain.com/nginx/,以此类推。
后面if语句的作用是将domain.com的方位重定向到www.domain.com,这样既解决了网站的主目录访问,又可以增加seo中对www.domain.com的域名权重。
分享到:
相关推荐
server_name指令可以设置基于域名的虚拟主机,根据请求头部的内容,一个ip的服务器可以...server_name nginx.*; server_name jb51.netg bucknell.net brackley.org; server_name localhost litchfield bleddington; s
所以在这里用到了nginx的proxy_redirect指定修改被代理服务器返回的响应头中的location头域跟refresh头域数值 以下是截取nginx的一小段配置文档 server { listen 80; server_name www.boke.com; l
server_name localhost; limit_access_variable zone=one $limit_access_deny; location / { root html; index index.html index.htm; if ($limit_access_deny) { return 403; } } ...
nginx 的 default_server 指令可以定义默认的 server 去处理一些没有匹配到 server_name 的请求,如果没有显式定义,则会选取第一个定义的 server 作为 default_server。 在了解到如上规则后,我们可以捕获未做绑定...
最近排查一个web服务的问题,webserver使用的nginx,最终发现是踩了nginx中proxy_pass的一个坑,这里记录下来。 踩坑经过 一个线上的http服务,示例nginx关键配置如下: server { listen 80; server_name ligang....
后来,通过查看源代码发现MediaWiki是根据$_SERVER[‘SERVER_NAME’]做的跳转,顺藤摸瓜,发现了下列问题: 在一个Nginx虚拟主机中,可以绑定多个server_name,例如: 而server_name的先后顺序的不同,对PHP程序中...
-prefix=/opt/nginx-1.9.11 --add-module=/你的目录位置/fastdfs-nginx-module-master/src --with-http_ssl_module --with-stream 然后再make & make install ,最后在nginx-1.9.11/conf/nginx.conf中加入配置 ...
Nginx中的server_name指令主要用于配置基于名称虚拟主机,server_name指令在接到请求后的匹配顺序分别为: 1、准确的server_name匹配,例如: server { listen 80; server_name ssdr.info www.ssdr.info; ... } 2...
server_name localhost; location /content_by_python { content_by_python " import ngx ngx.echo('Hello, ngx_python') "; } } } } ``` 标签:ngxpython
nginx “nginx could not build the server_names_hash”解决方法 给一个服务器下增加了一些站点别名,差不多有20多个。 重启nginx时候,提示: could not build the server_names_hash, you should increase server...
Nginx强大的正则表达式支持,可以使server_name的配置变得很灵活,nginx多域名配置是在配置文件中建立多个server配置,在每个server配置中用server_name来对域名信息进行过滤。 实现方法如下: 举个例子,下面是一...
概述: 所有图像均基于Alpine Linux 基本图像:支持的标签和相应的Dockerfile链接: 1.15 , 1 , latest 1.14 1.13 环境变量多变的默认值描述NGINX_BACKEND_HOST php NGINX_SERVER_NAME default NGINX_SERVER_ROOT...
nginx 禁用未绑定的域名访问,由于现在虚拟服务器的增多,好多位置的网站也有可能映射到你的网站,这时你必须处理这些非法映射!
NGINX_RUN_USER=www-dataNGINX_RUN_GROUP=www-dataNGINX_LOG_DIR=/var/log/nginxNGINX_BACKEND_IP=172.17.42.1NGINX_BACKEND_PORT=80NGINX_SERVER_NAME=localhostNGINX_SERVER_NAME_2=docker.localhost使用预先构建...
Nginx代理 ...nginx_proxy_server_name :服务器名称,默认$hostname 。 如果要配置虚拟主机,请设置此设置。 nginx_proxy_listen_http :监听此端口,默认为80 。 nginx_proxy_cachebuster_port
NginxConfigMaker 使用Ruby生成Nginx配置安装将此行添加到您的应用程序的Gemfile中: gem 'nginx_config_maker'然后执行: $ bundle或将其自己安装为: $ gem install nginx_config_maker用法要生成这样的上游配置:...
nginx配置文件的详细介绍。 #设定http服务器 #server表示虚拟主机可以理解为一个站点,可以配置多个server节点搭建多个站点 #每一个请求进来确定使用哪个server由server_name确定 #location用来匹配同一域名下...
server_name 127.0.0.1 localhost; location / { root D:/ELK ; index index.html index.htm; } } server { listen 8099; server_name static.com; location / { root D:/vueitem ; index index....