前提・実現したいこと
Linux初学者です。
とあるウェブサーバでnginxの機能を使ってログインしている人のみ特定のファイルやURLを表示できるようにしたいと考えております。
ログインの情報はPHPのsessionを使用して管理したいと考えております。
現在、下記の通り設定をしたところエラーが発生しておりまして、対応方法を調べております。
ローカル環境のみの運用となるため、SSLの設定はしておりません。
ご存知の方がおりましたら教えていただけませんでしょうか。
よろしくお願いいたします。
発生している問題・エラーメッセージ
ブラウザでの表示
500 Internal Server Error
/var/log/nginx/error.log
2021/01/12 14:34:54 [error] 2675#2675: *26 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: xxx.xxx.xxx.xxx, server: localhost, request: "GET / HTTP/1.1", subrequest: "check.php", upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.sock:", host: "xxx.xxx.xxx.xxx:8080" 2021/01/12 14:34:54 [error] 2675#2675: *26 auth request unexpected status: 404 while sending to client, client: xxx.xxx.xxx.xxx, server: localhost, request: "GET / HTTP/1.1", host: "xxx.xxx.xxx.xxx:8080"
該当のソースコード
check.php
php
1<?php 2if ( empty($_COOKIE) ){ 3} 4session_start(); 5if ( !empty($_SESSION['login']) ) { 6 http_response_code(200); 7echo '200'; 8 return ; 9}else{ 10 http_response_code(401); 11 echo '401'; 12 return ; 13 14}
index.php
php
1<?php 2//セッションを使うことを宣言 3session_start(); 4 5//データベースに接続する 6try { 7 $pdo = new PDO('mysql:host=localhost; dbname=xxx', 'xxx', 'xxx', [ 8 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 9 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 10 ]); 11} 12catch (PDOExeption $e) { 13 exit ('データベースエラー'); 14} 15 16//ログイン状態の場合ログイン後のページにリダイレクト 17if (isset($_SESSION["login"])) { 18 session_regenerate_id(TRUE); 19 header("Location: success.php"); 20 exit(); 21} 22 23//postされて来なかったとき 24if (count($_POST) === 0) { 25 $message = ""; 26} 27//postされて来た場合 28else { 29 //ユーザー名またはパスワードが送信されて来なかった場合 30 if(empty($_POST["uname"]) || empty($_POST["pass"])) { 31 $message = "ユーザー名とパスワードを入力してください"; 32 } 33 //ユーザー名とパスワードが送信されて来た場合 34 else { 35 //post送信されてきたユーザー名がデータベースにあるか検索 36 try { 37 $stmt = $pdo -> prepare('SELECT * FROM users WHERE name=?'); 38 $stmt -> bindParam(1, $_POST['uname'], PDO::PARAM_STR, 10); 39 $stmt -> execute(); 40 $result = $stmt -> fetch(PDO::FETCH_ASSOC); 41 } 42 catch (PDOExeption $e) { 43 exit('データベースエラー'); 44 } 45 46 session_regenerate_id(TRUE); //セッションidを再発行 47 $_SESSION["login"] = $_POST['uname']; //セッションにログイン情報を登録 48 header("Location: success.php"); //ログイン後のページにリダイレクト 49 exit(); 50 51 } 52} 53 54$message = htmlspecialchars($message); 55?> 56 57<!DOCTYPE html> 58<html lang="ja"> 59<head> 60<meta charset="UTF-8"> 61<title>ログインページ</title> 62<link href="login.css" rel="stylesheet" type="text/css"> 63</head> 64<body> 65<h1>ログインページ</h1> 66<div class="message"><?php echo $message;?></div> 67<div class="loginform"> 68 <form action="index.php" method="post"> 69 <ul> 70 <li>ユーザー名:<input name="uname" type="text"></li> 71 <li>パスワード:<input name="pass" type="password"></li> 72 <li><input name="送信" type="submit"></li> 73 </ul> 74 </form> 75</div> 76</body> 77</html>
/etc/nginx/conf.d/default.conf
conf
1server { 2 listen 8080; 3 server_name localhost; 4 5 location / { 6 index index.html; 7 root /var/www/html; 8 } 9 10 error_page 500 502 503 504 /50x.html; 11 location = /50x.html { 12 } 13 14 location ~ .php$ { 15 fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; 16 fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; 17 include fastcgi_params; 18 } 19 20 location /index.html { 21 auth_request check.php; 22 error_page 401 =302 index.php; 23} 24 25}
補足情報(FW/ツールのバージョンなど)
使用OS CentOS7 2009
VMware Workstation 15 playerにインストールしてます
PHP 8.0.1 (cli)
nginx 1.18.0
MySQl 8.0.22
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。