Laravel 5.4 Подается в подкаталоге Nginx. 404 при включении файлов JS

Моя проблема заключается в обслуживании файлов CSS и JS с использованием Laravel 5.4 на сервере Nginx (Ubuntu). Я настроил сервер для обслуживания приложения из вложенного подкаталога (не в корне веб-сервера). Маршрутизация работает. Увидеть:

Проблема в том, что я не могу включить файлы JS (и, вероятно, CSS). Файл JS находится в "blog / public / js / posts.js".

Ниже приведена конфигурация моего сайта и код для включения файла JS в шаблон blade-сервера. Вы можете просмотреть ошибку в консоли, когда вы попали на сайт.

Конфигурация сервера:

server {
    return 404;
}

server {
    listen 80;
    listen [::]:80 ipv6only=on;

    listen 443 ssl;

    root /var/www/zwestwind.com/html;
    index index.php index.html index.htm;

    # Make site accessible from http://localhost/
    #server_name example.com www.example.com;
    server_name zwestwind.com www.zwestwind.com;

    ssl on;
    ssl_certificate /etc/nginx/ssl/pub_clf_origin.pem;
    ssl_certificate_key /etc/nginx/ssl/priv_clf_origin.key;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
        # Uncomment to enable naxsi on this location
        # include /etc/nginx/naxsi.rules
    }

    # route to laravel project: $uri = /sandboxes/zypth/blog/public/index.php
    location ~ ^/sandboxes/zypth/blog {
        alias /var/www/zwestwind.com/html/sandboxes/zypth/blog/public;
        try_files $uri $uri/ @laravel;

        location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
            #fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME /var/www/zwestwind.com/html/sandboxes/zypth/blog/public/index.php;
        }
    }

    location @laravel{
        rewrite /sandboxes/zypth/blog/(.*)$ /sandboxes/zypth/blog/index.php?/$1 last;
    }

    # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
    #location /RequestDenied {
    #   proxy_pass http://127.0.0.1:8080;    
    #}

    error_page 404 /404.html;

    # redirect server error pages to the static page /50x.html

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

        # With php5-cgi alone:
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #   deny all;
    #}
}

Блейд-код для включения файла JS:

<script src="{{ URL::asset('posts.js', true) }}"></script>

Вещи, которые я пробовал:

  • Я пытался использовать 'js / posts.js' и многие другие варианты, включая жестко закодированные пути, такие как 'zwestwind.com/sandboxes/zypth/blog/public/posts.js', но безрезультатно (с протоколом я могу только публиковать сообщения). 2 ссылки из-за репутации).
  • Добавление блока местоположения: location ~.js $ {...} для добавления заголовка содержимого application / x-javascript
  • Я настроил сервер vhost для обслуживания того же приложения по адресу (http) blog.zwestind.com/posts. Вся маршрутизация и включение файлов CSS / JS работает там, проверьте это. Конфигурация сервера для этого субдомена точно такая же, как указано в руководстве по установке Laravel.

Я предполагаю, что эта проблема связана с проблемой конфигурации сервера с основным доменом... то есть) блок местоположения, прослушивающий "^ / sandboxes / zypth / blog", перехватывает запрос файла JS и модифицирует URI, что приводит к 404. Как бы это исправить?

Когда скрипт заработает, он скажет "posts.js готов!" в консоли (см. субдомен на http для примера).

Благодарю.

PS Если кому-то интересно, ПОЧЕМУ я хочу разместить это приложение (и даже больше) во вложенном каталоге, то это потому, что я хочу размещать живые демонстрационные приложения, используя ОДИН сертификат SSL через ОДИН домен, а также учиться настраивать веб-серверы. Этот сервер не предназначен для интенсивного трафика.

1 ответ

Попробуйте включить файл следующим образом:

<script src="/js/posts.js"></script>

"/" Перед каталогом отправляет запрос в корень (общая папка), где находятся каталоги js и css.

Я нашел это лучше, чем добавление нового местоположения root или псевдонимов в конфигурации nginx.

Я делаю то же самое с изображениями, и это прекрасно работает.

Другие вопросы по тегам