如何为Angular和Django设置Nginx服务器

时间:2019-12-01 09:35:50

标签: django angular nginx gunicorn

我正在尝试将Web应用程序部署到服务器上。我将html文件放在一个文件夹中,并且我在同一台服务器上运行了django服务器。我正在使用nginx为后端设置反向代理,但是由于某些原因,我无法路由到后端网址。

这是我的nginx配置:

<!-- PHP Form validation script --> 
<?

// declare and empty local variables
$nameErr = $messageErr = $emailErr = $subjectErr = "";
$name = $message = $email = $subject =  "";
var_dump($_SERVER);
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (empty($_POST["name"])) {
        $nameErr = "Name is required and can only contain alphabet text";
    } else {
        $name = test_input($_POST["name"]);
        // check if name only contains letters and whitespace
        if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
            $nameErr = "Roman Alphabet and Spaces Only";
        }
    }
    if (empty($_POST["email"])) {
        $emailErr = "Email address is required";
    } else {
        $email = test_input($_POST["email"]);
        // check if e-mail address is well-formed
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $emailErr = "Please Correct Invalid Email Address";
        }
    }
    if (empty($_POST["subject"])) {
        $subjectErr = "Subject Cannot be Empty";
    } else {
        $subject = test_input($_POST["subject"]);
    }    
} 
if (empty($_POST["message"])) {
    $messageErr = "Message Cannot be Empty";
} else {
    $message = test_input($_POST["message"]);
}
function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
?>
<form method="post" action="
<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" class="p-5 bg-white">
    <div class="mb-3 border-bottom">
        <h2 class="h4 text-black mb-5">
            Send us a Message
        </h2>
        <p>
            Note that All Fields are Required
        </p>
    </div>
    <div class="row form-group">
        <div class="col-md-12 mb-3 mb-md-0">
            <label class="text-black" for="name"><font color="red" size="+2">
                * 
                </font>Your Name</label>
            <input type="text" id="name" class="form-control" value="
<?php echo $name ?? '';?>">
            <span class="list-group-item-danger"><?php echo $nameErr ?? '';?></span>
        </div>
    </div>
    <div class="row form-group">
        <div class="col-md-12">
            <label class="text-black" for="email"><font color="red" size="+2">
                * 
                </font>Your Email Address</label>
            <input type="email" id="email" class="form-control" value="
<?php echo $email ?? '';?>">
            <span class="list-group-item-danger"><?php echo $emailErr ?? '';?></span>
        </div>
    </div>
    <div class="row form-group">
        <div class="col-md-12">
            <label class="text-black" for="subject"><font color="red" size="+2">
                * 
                </font>Subject</label>
            <input type="subject" id="subject" class="form-control" value="
<?php echo $subject ?? '';?>">
            <span class="list-group-item-danger"><?php echo $subjectErr ?? '';?></span>
        </div>
    </div>
    <div class="row form-group">
        <div class="col-md-12">
            <label class="text-black" for="message"><font color="red" size="+2">
                * 
                </font>Your Message</label>
            <textarea name="message" id="message" cols="30" rows="7" class="form-control" placeholder="Your message here..." value="
<?php echo $message ?? '';?>"></textarea>
            <span class="list-group-item-danger"><?php echo $messageErr ?? '';?></span>
        </div>
    </div>
    <div class="row form-group">
        <div align="center" class="col-md-12">
            <input type="submit" value="Send Message" class="btn btn-primary btn-md text-white">
        </div>
    </div>
</form>

在第一块中。我将后备设置为index.html,因为它是一个有角度的应用程序。 角度应用程序运行正常。

但是我无法访问反向代理服务器的路由,每当我使用 / api / something 命中路由时,它将带我回到有角度的应用程序即index.html

1 个答案:

答案 0 :(得分:0)

这很简单,我必须像这样修改路径块

location ~^/(admin|api) {
    proxy_pass http://unix:/run/gunicorn.sock;
    proxy_redirect off;

    proxy_set_header   Host              $http_host;
    proxy_set_header   X-Real-IP         $remote_addr;
    proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Proto https;
 }