質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

11185閲覧

Nginxでrootと異なるaliasにあるPHPファイルにアクセスするとFile not foundになる(エラー内容: Primary script unknown)

nks

総合スコア1

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/05/12 10:56

前提・実現したいこと

初めてNginxでWEBサイトを構築しております。
システム要件上、URLを以下の通りファイルシステムに対応させなければいけません。

hogehoge.net/にアクセスした場合
→ ファイルシステムの"
/var/www/html/hoge
"に紐づけたい

hogehoge.net/devにアクセスした場合
→ ファイルシステムの"/var/www/html/fuga"に紐づけたい

いずれにおいても、PHPを実行可能にする必要があります。

発生している問題

hogehoge.net/devでのみ、PHPが実行できない状況です。
HTMLファイルは正常に表示できております。

問題の詳細・エラーメッセージ等

以下の単純な"test.php"ファイルを作成し動作確認しております。

<?php echo '<h1>PHP-test</h1><p>php動作確認ページ</p>' ?>

上記"test.php"ファイルを"/var/www/html/hoge"に配置し、ブラウザで**https://hogehoge.net/test.php**へアクセスした場合、正常にPHPの実行結果が表示されます。

しかし、同じファイルを"/var/www/html/fuga"に配置し、**https://hogehoge.net/dev**へアクセスした場合、File not foundが表示されてしまいます。
この際、Nginxのエラーログには以下の内容が出力されます。

2020/05/12 18:50:57 [error] 35485#35485: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: xxx.xxx.xxx.xxx, server: hogehoge.net, request: "GET /dev/test.php HTTP/2.0", upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.sock:", host: "hogehoge.net"

Nginx設定内容

default.conf

server { listen 443 http2 ssl; server_name hogehoge.net; # # [SSL設定] # (SSL設定は省略します) # # [ログファイル設定] # access_log /var/log/nginx/hogehoge-access.log ltsv; error_log /var/log/nginx/hogehoge-error.log debug; root /var/www/html/hoge; location / { try_files $uri /index.html index.php; location ~ .(php|html)$ { include /etc/nginx/conf.d/_conf.php; } } location /dev/ { alias /var/www/html/fuga; try_files $uri /index.html index.php; location ~ .(php|html)$ { include /etc/nginx/conf.d/_conf.php; } }

上記の通り、PHPの設定は外部ファイルに記述し、各locationブロックから同一の内容をincludeしております。
includeしているファイルの内容は以下です。

/etc/nginx/conf.d/_conf.php

_conf.php

1fastcgi_split_path_info ^(.+?.php)(/.*)?$; 2fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; 3fastcgi_index index.php; 4fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 5include fastcgi_params;

試したこと

  • fastcgi_paramの設定値を"SCRIPT_FILENAME $request_filename;"に変更して試行致しましたが、現象は改善せず、エラー内容も同じでした。

  • fastcgi_paramの変数**$document_root**をパス直書き(SCRIPT_FILENAME /var/www/html/fuga$fastcgi_script_name)にしてみましたが、現象は改善せず、エラー内容も同じでした。

環境情報

CentOS 7.8.2003
nginx 1.18.0
PHP 7.4.5


原因究明・問題解決のためご助力を賜りたく存じます。
情報に不足がございましたらお申しつけくださいませ。
何とぞ宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;」

「/var/www/html/fuga**/dev/**〜.php」に展開されているのだと思います。
/dev/rewrite で除外するとうまくいくと思います。

location /dev/ { (略) location ~ .(php|html)$ { rewrite /dev/(.*)$ /$1 break; include /etc/nginx/conf.d/_conf.php; } }

投稿2020/05/13 05:16

TaichiYanagiya

総合スコア12141

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nks

2020/05/13 07:21

ご教示いただいた通りにrewriteを追記することで、想定通りに動作するようになりました。 明瞭簡潔に原因と解決策をご提示いただき、大変感激しております。 誠にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問