У меня установлено несколько приложений в одном домене, каждое в своей собственной папке, например:
Мое дерево каталогов выглядит так:
/usr/share/www/
root/
index.html
rc/
index.php <--- roundcube
app1/
public/
css/
js/
index.php
appX/
public/
index.php
Одно из них - это веб-почта Roundcube, другие - приложения Laravel и корень имеет один файл HTML со ссылками и некоторой информацией. После нескольких дней поиска в Google, чтения документов, ответов на ошибки сервера и переполнения стека я придумал следующую конфигурацию, которая в основном работает, но очень многословна и повторяется и содержит жестко закодированный путь к laravels index.php сценарий. Есть ли более элегантное решение?
location / {
root /usr/share/nginx/root;
index index.html;
try_files $uri $uri/ =404;
}
location /app1 {
location = /app1/ {
rewrite ^(.*)$ /app1/index.php last;
}
alias /usr/share/nginx/app1/public;
index index.php;
if (-f $request_filename) {
break;
}
rewrite ^(.*)$ /app1/index.php last;
}
location ~ /app1/.+\.php$ {
root /usr/share/nginx/app1/public;
include fastcgi_params;
fastcgi_intercept_errors off;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/app1/public/index.php;
fastcgi_param HTTPS on;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
}
# And others like above with adjusted paths
# Setup Roundcube
location ^~ /rc {
root /usr/share/nginx;
index index.php;
try_files $uri $uri/ =404;
location ~ /rc/.+\.php$ {
root /usr/share/nginx/rc;
rewrite /rc/(.*)$ /$1 break;
include fastcgi_params;
fastcgi_intercept_errors off;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS on;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
}
location ~ /rc/favicon.ico$ {
root /usr/share/nginx/rc/skins/default/images;
log_not_found off;
access_log off;
expires max;
}
location = /rc/robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ ^/rc/(README|INSTALL|LICENSE|CHANGELOG|UPGRADING|README\.md|composer\.json-dist)$ {
deny all;
}
location ~ ^/rc/(bin|SQL)/ {
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;
}