У меня Ubuntu установлен на VPS. У меня нет доменного имени, поэтому весь контент доступен через https://IP: порт. Я пытался настроить nginx, чтобы запустить несколько веб-приложений, доступных через IP / имя.

Вот мой конфиг

server {

    listen 443 ssl;

    error_log /var/log/nginx/nginx_error.log;

    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

    set $root_path '/var/www/html';
    root $root_path;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html index.php;

    server_name localhost;

    # handle static files within project.. break at end to avoid recursive redirect
    location ~ app3/((.*)\.(?:css|cur|js|jpg|jpeg|gif|htc|ico|png|html|xml))$ {
            rewrite app3/((.*)\.(?:css|cur|js|jpg|jpeg|gif|htc|ico|png|html|xml))$ /app3/$1 break;
    }

    location /app3 {
        rewrite ^/app3(.*)?$ /app3/pathto/public/index.php?$1 last;
    }


    location / {
        try_files $uri $uri/ =404;
    }


    location /app1 {
        try_files $uri $uri/ /index.php;
    }

    location /app2 {
        try_files $uri/ /index.php;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        #try_files $uri $uri/ =404;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_nam
    }
}

Это хорошо работает для app1 и app2. Приложение 3 (приложение Laravel) не может работать правильно, поскольку оно использует абсолютные URL-адреса вместо относительных путей. Поэтому я получаю 404 запроса на /api .. вместо /app3 /pathto /public /.. (Я попробовал форк app3 с относительными путями, и все работает хорошо, за исключением некоторых изображений и шрифтов не отображаются)

Как я могу настроить nginx, чтобы app3 имел собственную корневую папку? Директива root или alias в папке app3 не будет работать должным образом.

Спасибо !

1 ответ1

1

Ваш вопрос касается предоставления app3 своей собственной корневой папки, и этот шаг прост. Пока вы отмечаете подводные камни, вы должны быть в порядке с этим. http://wiki.nginx.org/Pitfalls#Root_inside_Location_Block

Однако я не думаю, что это действительно решит вашу проблему. Похоже, ваша проблема в том, что приложение Laravel не может работать в подпапке или просто не настроено для работы в нем. На уровне nginx мало что можно сделать, чтобы это исправить. Но проверьте конфигурацию для любой справки о конфигурации приложения.

Альтернативное "решение" - установить (или переписать) ресурсы приложения 3 (api/, img/ и т.д.) В корне и вместо этого переписать только приложения 1 и 2. Это будет не самое элегантное решение, но пока в приложении Laravel нет папок с именем app1 или app2, оно должно работать.

Изменить: Третий вариант, и, вероятно, лучший, конечно, это выложить около $ 10 или около года в год за доменное имя, или получить бесплатный поддомен от бесплатного сервиса DNS. Тогда вы можете иметь отдельный домен (или поддомен) для app3. У меня нет опыта работы с бесплатными DNS-сервисами, но это должно вам помочь.

https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=free+domain+names+with+dns

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .