我无法从NGINX中的URL中获取子域名。
这是我的configuration:
server { listen 80; server_name ~^(?<appname>)\.example\.com$; rewrite ^ https://$appname.example.com$request_uri? permanent; }
当我做:
http://bob.example.com/
我被发送到:
https://.example.com/
我不知道我做错了什么。
我正在使用NGiNX 1.2.7。
我有另一个configuration:
http://example.com/
所以我有一个服务器块的域没有子域和第二个与子域…这是关于子域。
UPDATE
这里的redirect(这是我试图提取子域的原因):
server { listen 443 ssl; server_name ~^(?<appname>)\.example\.com$; ssl on; ssl_certificate /etc/ssl/certs/example.com.crt; ssl_certificate_key /etc/ssl/private/example.key; root /var/www/example.com/apps/$appname/; include /var/nginx/general/php; include /var/nginx/general/upload; include /var/nginx/general/error_page_50x; }
新的更新
我得到的新错误(这是没有P):
2013/06/30 00:49:02 [error] 7707#0: *64 directory index of "/var/www/example.com/apps//" is forbidden, client: 00.000.000.00, server: ~^(?<appname>)\.example\.com$, request: "GET / HTTP/1.1 ", host: "ebooks.example.com" 2013/06/30 00:49:02 [error] 7707#0: *64 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 00.000.000.00, server: ~^(?<appname>)\.example\.com $, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "ebooks.example.com" 2013/06/30 00:49:04 [error] 7707#0: *64 directory index of "/var/www/example.com/apps//" is forbidden, client: 00.000.000.00, server: ~^(?<appname>)\.example\.com$, request: "GET / HTTP/1.1 ", host: "ebooks.example.com" 2013/06/30 00:49:04 [error] 7707#0: *64 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 00.000.000.00, server: ~^(?<appname>)\.example\.com $, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "ebooks.example.com"
这是与P后面的:
2013/06/30 00:55:57 [error] 17915#0: *74 directory index of "/var/www/example.com/apps//" is forbidden, client: 00.000.000.00, server: ~^(?P<appname>)\.example\.com$, request: "GET / HTTP/1 .1", host: "drive.example.com" 2013/06/30 00:55:57 [error] 17915#0: *74 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 00.000.000.00, server: ~^(?P<appname>)\.example\.c om$, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "drive.example.com"
你所做的只是将HTTPredirect到HTTPS,所以你根本不需要这个正则expression式。
相反,做这样的事情:
server { listen [::]:80; server_name *.example.com; return 301 https://$http_host$request_uri$is_args$args; }
如果您正在运行CentOS 5(或其他较旧的操作系统),则可能是由于较旧的PCRE库。 Python兼容的语法可能适用于你:
server_name ~^(?P<appname>)\.example\.com$;
之后的变化是P ? 。 这在PCRE 4.0或更高版本中得到支持,其中没有P的方法需要PCRE 7.0或更高版本。
这在Nginx手册的服务器名称页面的正则expression式名称下进行了解释。
我只需要添加。+ after?<subdomain>:
server { listen 80; server_name *.example.com; return 301 https://$http_host$request_uri$is_args$args; } server { listen 443 default_server ssl; server_name ~^(?<subdomain>.+)\.example\.com$; ssl on; ssl_certificate /etc/ssl/certs/example.com.crt; ssl_certificate_key /etc/ssl/private/example.key; root /var/www/example.com/apps/$subdomain/; include /var/nginx/general/php; include /var/nginx/general/upload; include /var/nginx/general/error_page_50x; }