关于nginx虚拟主机和子域配置有一些问题, 但它无法实现。
我有3个域和一个IP地址(多站点)
www.a1.com
www.a2.com
www.a3.com
我想使用简单的nginx配置来设置它,当我输入
时网址重写
a1.com => force redirect non-www to WWW url www.a1.com
www.a1.com => pass to /usr/share/nginx/html/a1.com/
www.blog.a1.com => pass to /usr/share/nginx/html/a1.com/blog/
*www.photo*.a1.com=> pass to /usr/share/nginx/html/a1.com/*photo*/
...and so on
a2.com => force redirect non-www to WWW url www.a2.com
www.a2.com => pass to /usr/share/nginx/html/a2.com/
www.blog.a2.com => pass to /usr/share/nginx/html/a2.com/blog/
www.photo.a2.com=> pass to /usr/share/nginx/html/a2.com/photo/
www.user.a2.com=> pass to /usr/share/nginx/html/a2.com/user/
...and so on
a1,a2和a3.com使用相同的配置。
这是我的第一个代码,我该如何解决?
伪代码
if subdomain lacks 'www' then pass to $scheme://www.$host$request_uri;
if subdmain <>'' then pass to /usr/share/nginx/html/$host/<#subdmain#>/$request_uri;
/etc/nginx/conf.d/default.conf
server {
# Redirect non-www to WWW
server_name "~^(?!www\.).*" ;
return 301 $scheme://www.$host$request_uri;
}
server {
listen 80 default;
#automatic judging hostname
server_name ~^(www\.)?(?<domain>.+)$;
location / {
#automatic change folder
root /usr/share/nginx/html/$domain/;
index index.html index.php;
#try_files $uri $uri/ /index.php?$query_string;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# judging subdomain which have "www"
if ($subdomain = 'www') {
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/$domain$fastcgi_script_name;
}
# judging subdomain like "blog" and trans to blog folder
else {
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/$domain/$subdomain/$fastcgi_script_name;
}
include fastcgi_params;
}
}
答案 0 :(得分:0)
不要过度复杂化nginx配置:)我想你可以创建3个服务器{}块。 现在就像你现在一样。 www.domain.com排名第二,www.subdomain.domain.com排名第三
对于第二个服务器定义,您需要此正则表达式:
server_name ~^(www\.)(?P<domain>.+)\.com$;
root /usr/share/nginx/html/$domain.com/www;
对于第三服务器定义,您需要此正则表达式:
server_name ~^(www\.)(?P<subdomain>.+)\.(?P<domain>.+)\.com$;
root /usr/share/nginx/html/$domain.com/$subdomain;
在使用regexp进行一些操作后,您可以改进这些规则,并且不仅仅处理域名。)