Назад | Перейти на главную страницу

Как оптимизировать конфигурацию Nginx для обслуживания Laravel из подкаталога

У меня установлено несколько приложений в одном домене, каждое в своей собственной папке, например:

Мое дерево каталогов выглядит так:

 /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;
    }