Laravel 5.4 Подается в подкаталоге Nginx. 404 при включении файлов JS
Моя проблема заключается в обслуживании файлов CSS и JS с использованием Laravel 5.4 на сервере Nginx (Ubuntu). Я настроил сервер для обслуживания приложения из вложенного подкаталога (не в корне веб-сервера). Маршрутизация работает. Увидеть:
- https://zwestwind.com/sandboxes/zypth/blog/tasks
- https://zwestwind.com/sandboxes/zypth/blog/posts
- и просто..blog /.
Проблема в том, что я не могу включить файлы 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.
Я делаю то же самое с изображениями, и это прекрасно работает.