できることはすべて試しましたが、うまくいきません。
サブドメインを NGinx を使用して Debian サーバーの特定のフォルダーにリダイレクトしたいのですが、試した構成は次のとおりです。
server {
listen 8080;
server_name ~^(?<user>.+)\.example\.net$;
root /srv/www/example.net/$user;
}
=> エラーは:
nginx の起動: [emerg]: 不明な「ユーザー」変数構成ファイル /etc/nginx/nginx.conf テストに失敗しました
(注:ここに示されているように、^なしでも試しました:Nginx server_name regexp not working as variable)
代わりにこれを試してみると:
server {
listen 8080;
server_name *.example.net$;
root /srv/www/example.net/$1;
}
リクエストにエラーがあります:
2013/08/20 15:38:42 [エラー] 5456#0: *6 "/srv/www/example.net//" のディレクトリ インデックスは禁止されています。クライアント: xxx.xxx.xxx.xxx、サーバー: * .example.net、リクエスト: "GET / HTTP/1.1"、ホスト: "test.example.net:8080"
別名、$1 は空です !
ドキュメントは間違っています: http://nginx.org/en/docs/http/server_names.html
アップデート:
これは機能しています ( https://serverfault.com/questions/457196/dynamic-nginx-domain-root-path-based-on-hostnameから取得):
server {
server_name ~^(.+)\.example\.com$;
root /var/www/example.com/$1/;
}
しかし、PHP ページを表示したいのですが、サーバー {} に以下を追加すると、$1 は空になります (wtf?) :
index index.php index.html;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# Make sure files with the following extensions do not get loaded by nginx because nginx would display the source code, and these files can contain PASSWORDS!
location ~* \.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(\..*|Entries.*|Repository|Root|Tag|Template)$|\.php_ {
deny all;
}
# Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ {
expires max;
log_not_found off;
}
location ~ \.php$ {
server_tokens off;
try_files $uri $uri/ /index.php?$args;
fastcgi_pass unix:/tmp/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code;
fastcgi_intercept_errors off;
fastcgi_send_timeout 30s;
fastcgi_read_timeout 30s;
}