Linux Mint 20.3 では、Web サイトのローカル開発用に次のセットアップを実行できました。
server {
listen 80;
listen [::]:80;
server_name cbp.local;
root /home/gacek/html/cbp/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
if (!-d $request_filename) {
rewrite ^/(.+)/$ /$1 permanent;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
}
}
これはディレクトリにある Laravel アプリケーションであり/home/gacek/html/cbp
、index.php
エントリポイントはサブフォルダーにあります/public
。
Linux Mint 21.1 を新規インストールした後、同じ nginx 構成で 404 not found が発生します。
404 見つかりません nginx/1.18.0 (Ubuntu)
私は試した:
ディレクトリの所有権の調整:
sudo chown -R gacek:www-data /home/gacek/html/cbp
権限の拡大:
sudo chmod -R 776 /home/gacek/html/cbp
シンボリックリンクを作成し、nginx 設定ファイルを調整する
sudo ln -s /home/gacek/html/cbp /var/www/
最後に試したのは、次の構成が完全に正常に動作することです。
server {
listen 80;
listen [::]:80;
server_name example.local;
root /var/www/test;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
}
}
この nginx サイト構成が機能しないのはなぜですか? 2 つの違いはどこにありますか?
編集
設定を変更しましたLaravelドキュメントのガイド:
server {
listen 80;
listen [::]:80;
server_name cbp.local;
root /home/gacek/html/cbp/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME /home/gacek/html/cbp/public$fastcgi_script_name;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
この変更後、ページに表示されるエラーは次のように変わりました。
File not found.
そして、nginx のエラー ログに次のエラーが表示されます。
答え1
ほとんど完了しているように見えます。コンテンツをホストするための特定のディレクトリを設定し、そのディレクトリに適切な権限を適用しましたが、nginx がどのユーザーとして実行されているか、そのユーザーがwww-data
ホスト上のグループのメンバーであるかどうかは確認していません。
nginxを実行しているユーザーをグループに追加しwww-data
、そのグループに適切な権限があることを確認することをお勧めします。
実際には、特別な理由がない限り、コンテンツ ディレクトリをデフォルトで書き込み可能にしないことをお勧めします。特別な理由がある場合は、ルートが書き込み不可である一方で書き込み可能な専用のサブディレクトリを作成することをお勧めします。
まとめると、おそらく次のようになります。
usermod -aG nginx www-data
chmod -R 755 /home/gacek/html/cbp
chmod 644
実際には、上記をディレクトリ/サブディレクトリにのみ適用し、すべてのファイルに適用することで、ディレクトリ権限をさらに強化することができます。
編集:あなたに代わってオンラインで検索しました他の場所、これは潜在的な問題の良い候補のようです:ProtectHome=true
の systemd init ファイルに がある可能性がありますphp-fpm.service
。
- 始まる
ProtectHome=false
/etc/systemd/system/multi-user.target.wants/php-fpm.service
systemctl daemon-reload
systemctl restart nginx.service
systemctl restart php-fpm.service
皮肉なことに、たとえば、最初にコードをホーム フォルダーに置くのは奇妙だと個人的には気づきました/var/www/html/
が、そのことは胸に留めておくことにしました。結局、それが関連していることがわかりました。