将PHP网站移至Nginx反向代理之后

时间:2018-08-04 09:44:40

标签: php nginx

我已经将运行的网站从标准Apache服务器配置移至基于Docker容器的平台,所有内容都位于(主容器)Nginx反向代理之后。通常,这是简单而无缝的。

但是,我现在正在对异常情况进行故障排除。当前的是另一个Web服务器容器中的PHP会话...

我要做的就是使用“ php:7.2-apache”创建一个docker容器并启用mysqli扩展。此容器指向相同的html / php源位置。

该站点具有以前使用过的使用PHP会话的简单登录功能。 login.php页面具有一个提交给自己的表单。如果user / pass变量位于$ _SESSION变量中,并且与数据库查询匹配,则应将用户重定向到实际的“隐藏” edit.php页面。但是它永远不会到达那里!看着上面的日志文件(由于要解决的另一个问题,我抑制了Warnings日志记录...),执行上述操作会产生login.php页面的返回200。

尝试调试放置print_r($ _ SESSION)语句时,$ _ SESSION为空。

还有其他事情需要我做些或更改以恢复以前的行为吗?在Nginx反向代理后面还会发生什么/表现不同?

login.php代码:

<head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Website</title>
    <!-- Bootstrap -->
    <link href="../css/bootstrap.css" rel="stylesheet">
    <link href="../css/bootstrap-theme.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    <script src="../js/bootstrap.min.js"></script>
    <script>
        $(document).ready(function(){
            $('[data-toggle="popover"]').popover(); 
        });
    </script>
</head>
<body>
    <?php
        if(empty($_SESSION)){
            print("empty");
        }

        if(isset($_POST['submit'])){
            $theuser = $_POST['username'];
            $thepassword = $_POST['password'];
        }

        if(!empty($_POST)){
            $mysqli = new mysqli('mysqlhost','user','pass','db_name');
            $query = "SELECT username, password FROM users WHERE username = '$theuser'";

            $results = $mysqli->query($query);
            $login_ok = false;

            while($row = $results->fetch_assoc()) {
                if($thepassword === $row['password']){
                    session_start();
                    $_SESSION['user'] = $row;
                    $login_ok = true;
                }
            }
            $results->close();
            $mysqli->close();

            if ($login_ok) {
                header("Location: https://www.website.com/edit.php");
            }
            else{ 
                print("Login Failed."); 
                $submitted_username = htmlentities($_POST['username'], ENT_QUOTES, 'UTF-8'); 
            }
        }
    ?>
<div class="container">
    more html stuff....
</div>
</body>

在edit.php文件的顶部,我有:

<?php
    session_start();
    include 'functions.php';
    print_r($_SESSION);

    if(empty($_SESSION['user'])) 
    {
        header("Location: login.php");
        die("Redirecting to login.php"); 
    }
?>

但是我不认为我什至可以访问此页面,因为日志中没有任何内容...我所看到的只是从login.php返回的200:

  

w.x.y.z--[04 / Aug / 2018:09:09:09 +0000]“ POST /login.php HTTP / 1.1”   200889“ https://www.website.com/login.php”“ Mozilla / 5.0(Macintosh;   Intel Mac OS X 10_13_4)AppleWebKit / 605.1.15(KHTML,如Gecko)   版本11.1 Safari / 605.1.15“

上面的(w.x.y.x)行中的IP地址是内部Docker网络范围,如果这很重要(?)。 PHP的$ _GET和$ _POST变量可以按预期运行,并包含适当的值。

编辑:附加的故障排除/诊断... 在其他页面和主题中找到详细信息之后,我还检查了其他方面。当我的session.save_path变量设置为“无值”时,它将写入容器内的/tmp。我已连接到控制台会话,并验证此目录存在并且其中包含文件。如果这可能有其他问题,我还能或应该做哪些其他检查?

我还可以执行其他哪些测试?我可以启用日志记录吗?等

0 个答案:

没有答案