gpt4 book ai didi

django - Apache 服务于 Django 和 Angular

转载 作者:太空狗 更新时间:2023-10-29 17:59:05 24 4
gpt4 key购买 nike

我有一个由 Django Rest API 提供 Angular 前端的项目。我的项目结构如下。

example.com
|- client (holds angular files)
|- server (holds Django Rest Framework files)

angular 应用程序通过 http: 调用 drf

example.com/api/<params>

我在 Linode Ubunutu 17.04 上托管,使用 Apache 和 uWSGI。我似乎无法找出同时为 Angular 和 Django 提供服务的最佳方式?我可以使用 WSGI 配置轻松托管 Django Rest API,但无法弄清楚 Apache 是如何知道为正常请求指向 Angular 的。

下面的解决方案有什么问题或者有更好的方法吗?

在/etc/apache2/sites-available/example.com.conf 中

<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/client/
</VirtualHost>

<VirtualHost *:80>
ServerName example.com/api
ServerAlias www.example.com/api
WSGIScriptAlias / var/www/example.com/index.wsgi
DocumentRoot /var/www/example.com/server/
</VirtualHost>

如有任何帮助,我们将不胜感激!

最佳答案

我不知道这是否是最好的方法,但它对我有用:

<VirtualHost *:80>
ProxyPreserveHost On
ProxyRequests Off

ProxyPass /api/ http://localhost:8000/api/
ProxyPassReverse /api/ http://localhost:8000/api/

ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>

# Server
<VirtualHost *:8000>
<Directory var/www/example.com/server>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

# mod_wsgi configuration for django app
# python-home represents a location of venv, in this case same as application path, but it's not neccessarily the same
# python-path represents a location of application
WSGIDaemonProcess my_app python-home=var/www/example.com/server python-path=var/www/example.com/server
WSGIProcessGroup my_app
WSGIScriptAlias / var/www/example.com/server/wsgi.py
</VirtualHost>

# Client
<VirtualHost *:8080>
DocumentRoot /var/www/example.com/client
<Directory /var/www/example.com>
Require all granted
</Directory>
</VirtualHost>

通过在 /etc/apache2/ports.conf 中添加以下行来监听端口 8000 和 8080:

# Internal: server
Listen 8000

# Internal: client
Listen 8080

解释:监听端口 80 的 VirtualHost 充当代理,根据请求的 URL 将请求进一步重定向到不同的端口。如果 URL 以 /api/ 开头,请求将被重定向到端口 8000(内部),该端口又由另一个 VirtualHost 处理。如果 URL 不是以 /api/ 开头,请求将被重定向到代表客户端的端口 8080。

在这个解决方案中,我使用的是 mod_wsgi 而不是 uWSGI,但方法是一样的(只有 Server VirtualHost 的配置不同)。

关于django - Apache 服务于 Django 和 Angular,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45034305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com