我正在尝试将cdn.minora.me/forum/中的每个文件重写到另一个目录中:
server { listen 443 ssl; listen [::]:443 ssl; ssl on; ssl_certificate /etc/nginx/ssl/minora.me.crt; ssl_certificate_key /etc/nginx/ssl/minora.me.key; root /srv/minora.me/webservices/cdn.minora.me; index index.html index.htm index.php; server_name cdn.minora.me; location ~* \.(eot|ttf|woff|js|css|svg)$ { add_header Access-Control-Allow-Origin *; } location /forum/(images|language|sounds|templates|uploads|vendor|src\/modules|nodebb\.min\.js(\.map)?|stylesheet\.css|admin\.css) { alias /srv/minora.me/webservices/forum.minora.me/public/; } location / { try_files $uri $uri/ /index.php; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm-cdn.minora.me.sock; fastcgi_index index.php; include fastcgi_params; } location ~ /\.ht { deny all; } }
我试图访问的文件,例如:
cdn.minora.me/forum/stylesheet.css
肯定存在,例如上面的样式表可以在我的服务器上的以下path下find
/srv/minora.me/webservices/forum.minora.me/public/stylesheet.css 。
但是当我尝试访问例如nginx是拖延404未find错误
cdn.minora.me/forum/stylesheet.css
它似乎根本不使用规则,这里是nginx错误日志的一部分:
2014/12/23 15:30:51 [error] 30277#0: *8 open() "/srv/minora.me/webservices/cdn.minora.me/forum/stylesheet.css" failed (2: No such file or directory), client: 141.101.105.127, server: cdn.minora.me, request: "GET /forum/stylesheet.css HTTP/1.1", host: "cdn.minora.me" 2014/12/23 15:30:53 [error] 30277#0: *9 open() "/srv/minora.me/webservices/cdn.minora.me/forum/stylesheet.css" failed (2: No such file or directory), client: 141.101.105.127, server: cdn.minora.me, request: "GET /forum/stylesheet.css HTTP/1.1", host: "cdn.minora.me" 2014/12/23 15:30:57 [error] 30277#0: *9 open() "/srv/minora.me/webservices/cdn.minora.me/forum/stylesheet.css" failed (2: No such file or directory), client: 141.101.105.127, server: cdn.minora.me, request: "GET /forum/stylesheet.css HTTP/1.1", host: "cdn.minora.me" 2014/12/23 15:31:14 [error] 30277#0: *23 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 141.101.93.222, server: img.minora.me, request: "HEAD /assets/loader/[email protected] HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm-img.minora.me.sock:", host: "img.minora.me", referrer: "https://minora.me/" 2014/12/23 15:35:24 [error] 30281#0: *31 open() "/srv/minora.me/webservices/cdn.minora.me/forum/stylesheet.css" failed (2: No such file or directory), client: 141.101.105.127, server: cdn.minora.me, request: "GET /forum/stylesheet.css HTTP/1.1", host: "cdn.minora.me" 2014/12/23 15:35:26 [error] 30278#0: *43 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 141.101.105.168, server: cdn.minora.me, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm-cdn.minora.me.sock:", host: "cdn.minora.me"
还用aliasreplaceroot不起作用。 谁能帮忙?
错误日志显示的问题表明您的location /forum/...未被匹配。
location /forum/(images|language|sounds|templates|uploads|vendor|src\/modules|nodebb\.min\.js(\.map)?|stylesheet\.css|admin\.css) { alias /srv/minora.me/webservices/forum.minora.me/public/; }
我在这里看到的问题是,这不被视为一个正则expression式匹配,但正在处理从字面上,因为它不是从location ~开始。
此外,在alias和正则expression式匹配的情况下,别名必须包含一个用于捕获location的variables。
这应该可以解决问题。
location ~ /forum/(images|language|sounds|templates|uploads|vendor|src\/modules|nodebb\.min\.js(\.map)?|stylesheet\.css|admin\.css) { alias /srv/minora.me/webservices/forum.minora.me/public/$1; }