server {
listen 80;
server_name test.sohu.com;
location / {
root /opt/www/momentplus;
index index.html;
}
location /momentplus {
alias /opt/www/momentplus;
}
location /weixin {
proxy_pass http://localhost:8081;
}
if ($http_user_agent ~ "(Android|UC|iPhone|Opera\sMini|MIDP-[0-9]|MIDP[0-9]|SymbianOS|Symbian\sOS|Windows\sCE|BlackBerry|^SonyEricsson|^Nokia|^NOKIA|UP\.Link|^SAMSUNG|^MOT-|^DoCoMo|UP\.Browser|^Mitsu|UCWEB|MAUI|^Palm|^Blazer|^BIRD\.E868)"){
set $ismobile 2;
}
if ($http_accept ~ "(/vnd\.wap)"){
set $ismobile 2;
}
if ($http_x_up_bearer_type ~ "(.+)"){
set $ismobile 2;
}
if ($http_x_source_id ~ "(.+)"){
set $ismobile 2;
}
if ($http_encryptmdn ~ "(.+)"){
set $ismobile 2;
}
if ($http_via ~ "(wap.+WISG)"){
set $ismobile 2;
}
#set plat
if ($http_user_agent ~* "iPhone") {
set $plat iphone;
}
if ($http_user_agent ~* "Android") {
set $plat android;
}
#ad
location ^~ /w/l {
if ($query_string ~* "f=([\w]+)([&|]$)"){
set $f $1;
}
#wap
if ($ismobile = 2){
rewrite ^ http://w.sohu.com/t2/download.do? redirect;
}
#pc
rewrite ^ http://t.sohu.com/mphone/client?key=phone_search redirect;
#rewrite "^.*$" http://cam.sohu.com?abc=abc redirect;
}
#dw
location ^~ /w/d {
#first from http_user_agent
if ($plat = iphone){
rewrite ^ http://itunes.apple.com/us/app/id378043162?mt=8 last;
}
set $t 41003;
if ($query_string ~* "t=([\d]+)"){
set $t $1;
}
if ($plat = android){
rewrite ^ http://pp.mtc.sohu.com/mt/client/android/sohumblog_$t.apk? redirect;
}
#secode from query_url
if ( $query_string ~* "p=(iphone)(.*)$") {
rewrite ^ http://itunes.apple.com/us/app/id378043162?mt=8 redirect;
}
rewrite ^ http://pp.mtc.sohu.com/mt/client/android/sohumblog_$t.apk? redirect;
}
}
一、nginx的Location可以有以下几个匹配:
1. = 严格匹配这个查询。如果找到,停止搜索。
2. ^~ 匹配路径的前缀,如果找到,停止搜索。
3. ~ 为区分大小写的正则匹配
4. ~* 为不区分大小写匹配
例子:
1、
location = / {
# 只匹配 / 查询。
[ configuration A ]
}
2、
location / {
# 匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配。
[ configuration B ]
}
3、
location ^~ /images/ {
# 匹配任何已 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
[ configuration C ]
}
4、
location ~* \.(gif|jpg|jpeg)$ {
# 匹配任何已 gif、jpg 或 jpeg 结尾的请求。然而所有 /images/ 目录的请求将使用 Configuration C。
[ configuration D ]
}
例子请求:
1、/ -> configuration A
2、/documents/document.html -> configuration B
3、/images/1.gif -> configuration C
4、/documents/1.jpg -> configuration D
注意:按任意顺序定义这4个配置结果将仍然一样。
二、nginx alias
nginx貌似没有虚拟目录的说法,因为它本来就是完完全全根据目录来设计并工作的。
如果非要给nginx安上一个虚拟目录的说法,那就只有alias标签比较“像”,干脆来说说alias标签和root标签的区别吧。
最基本的区别:alias指定的目录是准确的,
root是指定目录的上级目录,并且该上级目录要含有location指定名称的同名目录。另外,根据前文所述,使用alias标签的目录块中不能使用rewrite的break。
列:
location /abc/ {
alias /home/html/abc/;
}
在这段配置下,http://test/abc/a.html就指定的是/home/html/abc/a.html。这段配置亦可改成
location /abc/ {
root /home/html/;
}
这样,nginx就会去找/home/html/目录下的abc目录了,得到的结果是相同的。
但是,如果我把alias的配置改成:
location /abc/ {
alias /home/html/def/;
}
那么nginx将会从/home/html/def/取数据,这段配置还不能直接使用root配置,如果非要配置,只有在/home/html/下建立一个 def->abc的软link(快捷方式)了。
一般情况下
1、在location /中配置root,在location /other中配置alias是一个好习惯。
2、使用alias时目录名后面一定要加“/”
三、nginx配置文件中的参数变量及条件判断
正则表达式匹配,其中:
* ~ 为区分大小写匹配
* ~* 为不区分大小写匹配
* !~和!~*分别为区分大小写不匹配及不区分大小写不匹配
文件及目录匹配,其中:
* -f和!-f用来判断是否存在文件
* -d和!-d用来判断是否存在目录
* -e和!-e用来判断是否存在文件或目录
* -x和!-x用来判断文件是否可执行
flag标记有:
* last 相当于Apache里的[L]标记,表示完成rewrite
* break 终止匹配, 不再匹配后面的规则
* redirect 返回302临时重定向
* permanent 返回301永久重定向
一些可用的全局变量有,可以用做条件判断(待补全)
$args
$content_length
$content_type
$document_root
$document_uri
$host
$http_user_agent
$http_cookie
$limit_rate
$request_body_file
$request_method
$remote_addr
$remote_port
$remote_user
$request_filename
$request_uri
$query_string
$scheme
$server_protocol
$server_addr
$server_name
$server_port
$uri
四、
分享到:
相关推荐
nginx多域名配置示例 php多级域名配置 二级域名配置示例 nginx伪静态示例
华为ensp配置示例,含配置操作文档word及能在ensp软件上运行的配置示例 ,包含1、电脑与交换机的链接2、交换机与交换机的链接3、交换机与路由器的链接4、路由器的配置5、防火墙的配置
统一边界网元转码的配置示例-Cisco 本文档提供了统一边界网元转码的配置示例,基于CiscoUnified Border Element(多维数据集)对统一边界网元转码的支持。该配置示例展示了如何配置多维数据集和DSP资源,以实现统一...
思科OSPF配置示例,经典思科命令 思科OSPF配置示例,经典思科命令 思科OSPF配置示例,经典思科命令 思科OSPF配置示例,经典思科命令
**CCNP课堂配置示例详解** CCNP(Cisco Certified Network Professional),即思科认证网络专业人员,是全球广泛认可的IT认证之一,专注于网络技术的深入学习与实践。本资料包“CCNP课堂配置示例”是针对CCNP认证...
高科V2060PBX配置示例. 高科V2060PBX配置示例. 高科V2060PBX配置示例.
如果你想要一个H3C设备配置的简单例子,我可以提供一个基本的交换机配置示例。这里假设我们正在配置一个H3C S5120系列交换机。 实际配置可能会根据你的具体需求和设备型号有所不同。在进行配置之前,请确保你已经...
强制Web认证配置示例 #### 3.1 组网需求 强制Web认证要求用户在接入网络后必须先通过Web页面进行身份验证,通常用于公共场所的无线上网服务。 #### 3.2 配置思路 配置过程中,需要设定用户接入后会被重定向到认证...
DFL210配置示例 DFL系列防火墙配置
华为交换机 VLAN 聚合(超级 VLAN)配置示例实用.pdf 本文档主要介绍了华为交换机 VLAN 聚合(超级 VLAN)配置的示例和实用操作步骤。该配置示例旨在解决不同部门的用户之间的互通问题,并实现 VLAN 之间的二层隔离...
IP初级技术配置示例(MUX VLAN 添加主、组、隔离组,端口隔离)(STP)(主根,备根,创建聚合接口,主动端)(ppp认证,CHAP认证,动态IP地址协商)(PPP0E客户端和服务器端)(综合题型)(负载分担)(OSPF)(OSPF...
信捷PLC与三菱E700变频器联动控制:实现正反转、频率设定与监控功能示例,信捷PLC与三菱E700变频器通讯配置示例:实现正反转、停止控制及监控功能配置详解,信捷xd plc通讯三台E700变频器示例 硬件配置:xdm一台,三菱...
在本压缩包"jenkins-home"中,包含了完整的Jenkins配置示例和一系列插件,这将极大地帮助用户简化部署流程,提高工作效率。 首先,Jenkins 配置示例通常包含服务器的全局设置、项目构建配置、Job模板、脚本、以及...
nginx配置示例SSL
信捷PLC与三菱E700变频器通讯配置示例:实现三台变频器正反转控制、频率设定及监控运行数据,信捷xd plc通讯三台E700变频器示例 硬件配置:xdm一台,三菱E700变频器三台,威纶eb8000编程软件。 实现功能:3台变频器正...
BFD配置示例 BFD(Bidirectional Forwarding Detection,双向转发检测)是一种网络协议,用于检测网络之间的连接是否可用。下面是BFD配置示例,涵盖了Cisco、迈普、H3C、华为、锐捷等多个厂商的设备。 BFD配置语法...
tmux配置示例
以下是一个基础的Elasticsearch配置示例,包含了几个常见的配置项。
AD9516的寄存器配置示例 用于给AD9516时钟配置芯片进行成功寄存器配置的案例,可以拿来直接使用