nginxでユーザディレクトリを実装した際のドキュメントルートの変更について
現在、nginxでApacheのUserDirと同じ動きをするWEBサーバを構築しているのですが、
ユーザディレクトリのドキュメントルート指定について教えて頂きたいことがあります。
https://hogehoge.com/
にアクセスした場合は、/var/www/html
配下の物を、https://hogehoge.com/~fugafuga
にアクセスした場合は、/home/fugafuga/public_html
配下の物をそれぞれ表示するようにするため、下記のようなコンフィグを書きました。
server {
~
root /var/www/html;
#UserDir
location ~ ^/~(?<userdir_user>.+?)(?<userdir_uri>/.*)?$ {
index index.html index.htm index.php;
alias /home/$userdir_user/public_html$userdir_uri;
autoindex on;
#try_files $uri $uri/ /index.php?$args;
limit_req zone=limit_req_by_ip burst=10 nodelay;
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
include fastcgi_params;
fastcgi_buffers 256 128k;
fastcgi_buffer_size 128k;
fastcgi_intercept_errors on;
fastcgi_read_timeout 120s;
}
}
#Index
location / {
try_files $uri $uri/ /index.php?$args;
limit_req zone=limit_req_by_ip burst=10 nodelay;
location ~ \.php$ {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
fastcgi_buffers 256 128k;
fastcgi_buffer_size 128k;
fastcgi_intercept_errors on;
fastcgi_read_timeout 120s;
}
}
~
}
このコンフィグであれば、意図した動きをしてくれると思っていたのですが、テストを行った際に1点問題が発生しました。
https://hogehoge.com/~fugafuga/index.html
にて
<script src="/js/xxx.js>
のようにスクリプトのパスを指定すると、https://hogehoge.com/~fugafuga/js/xxx.js
ではなく、https://hogehoge.com/js/xxx.js
を読み込もうとします。
これは、rootでドキュメントルートを/var/www/html
として指定し、ユーザディレクトリはあくまでaliasを張っているだけですので、コンフィグ通りに動いてくれてはいるのですが、これを期待通りのhttps://hogehoge.com/~fugafuga/js/xxx.js
を読み込もうとするような仕組みを作るには、どのように変更してあげれば良いでしょうか・・・?
色々と確認したのですが、私が観測できる限りではうまい解決策が見つかりませんでした。
大変恐縮ですが、お知恵を拝借したく存じます。