Я пытаюсь создать приложение, используя laravel 7 и nginx на Docker для Windows.
Мне удалось показать верхнюю страницу на laravel в публикации c папка, но она никогда не читает файлы css и js в папке publi c и показывает 404 ошибки. Страница ошибки 404 иногда является страницей nginx, а иногда и laravel. (Код, который я покажу вам ниже, показывает код laravel)
Я подозревал, что эта проблема связана с моей конфигурацией nginx, и пробовал много вещей, но ничего не работает.
Вот моя структура каталогов laravel.
blog
-public
--index.php
--css
---index.css
--js
---jquery-3.4.1.min.js
Вот моя nginx .conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$uri - $is_args - args :::'
'$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
Вот мой default.conf. Закомментированные коды - это то, что я пробовал.
server {
index index.php index.html;
server_name localhost;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/html/blog/public;
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
#location ~ \.(css|js)$ {
# root /var/www/html/blog/public;
# try_files $uri $uri/ =404;
#}
#location /css/ {
# alias /var/www/html/blog/public/css/;
#}
#location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
# root /var/www/html/laravel/public;
# expires max;
# add_header Cache-Control public;
# access_log off;
#}
#location ~ \.css {
# add_header Content-Type text/css;
#}
#location ~ \.js {
# add_header Content-Type application/x-javascript;
#}
}
Я застрял на этой проблеме два дня, поэтому любые предложения полезны.
Редактировать :
Это то, что access.log говорит:
172.24.0.1 - - [31/Mar/2020:10:36:09 +0000] "GET /index.php HTTP/1.1" 200 443 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
172.24.0.1 - - [31/Mar/2020:10:36:10 +0000] "GET /js/jquery-3.4.1.min.js HTTP/1.1" 404 1564 "http://localhost/index.php" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
172.24.0.1 - - [31/Mar/2020:10:36:10 +0000] "GET /css/index.css HTTP/1.1" 404 1564 "http://localhost/index.php" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
error.log говорит nothng.
20200401
Я изменил root файла default.conf на / var / www/html и изменил структуру каталогов, чтобы выяснить, является ли эта проблема проблемой laravel или нет. Следующие файлы работают как сырое php приложение. Индекс. php пытается прочитать индекс. css.
html
-index.php
-css
--index.css
Он читает индекс. css, но не меняет стиль. Я написал те же css в качестве индекса. css в теге индекса. php, чтобы убедиться, что синтаксис правильный, и он правильно изменил стиль. Более того, он показал следующую ошибку на Chrome:
Resource interpreted as Stylesheet but transferred with MIME type text/html: "http://localhost/index.css".
index. css выглядит так в моем редакторе:
h1{
text-align: center;
}
, но в браузере index. css совпадает с индексом. php:
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<title>Sapphire test</title>
<link rel="stylesheet" href="css/test.css">
</head>
<!--<style>-->
<!-- h1{-->
<!-- text-align: center;-->
<!-- }-->
<!--</style>-->
<body>
<header>
<h1>Sapphire test</h1>
</header>
<main>
<p>Hello World</p>
</main>
<script>
</script>
<footer>
</footer>
</body>
</html>
это так запутанно.