在单个服务器上运行多个 django 应用程序的一种方法是在每个端口上运行一个应用程序。
如何在两个不同的端口上运行两个应用程序?
正如 Django 所推荐的,我正在使用 wsgi 来连接 apache 和 Django 代码。棘手的事情是您不能在“嵌入式”模式下使用 wsgi。在嵌入式中,一些操作系统资源是共享的,因此会导致竞争条件。解决方案是在守护进程模式下使用 wsgi。在守护进程模式下,顾名思义,wsgi 作为单独的进程运行,因此没有共享资源。您的两个 django 应用程序将不知道彼此。
这就是我的配置的样子。我在端口 8082 和 8083 上运行应用程序。注意带有WSGIDaemonProcess
和WSGIProcessGroup
和的行process-group=pas
Listen 8082
<VirtualHost *:8082>
WSGIDaemonProcess djangoapp1 processes=2 threads=15 display-name=%{GROUP}
WSGIProcessGroup djangoapp1
WSGIScriptAlias /apis /home/apis/djangoapp1/xyz/config.wsgi process-group=djangoapp1
WSGIApplicationGroup %{GLOBAL}
<Directory /home/apis/djangoapp1>
Options +ExecCGI
<Files config.wsgi>
Require all granted
</Files>
</Directory>
</VirtualHost>
Listen 8083
<VirtualHost *:8083>
WSGIDaemonProcess djangoapp2 processes=2 threads=15 display-name=%{GROUP}
WSGIProcessGroup djangoapp2
WSGIScriptAlias /apis /home/apis/discovery_api/nykaa/config.wsgi process-group=djangoapp2
WSGIApplicationGroup %{GLOBAL}
<Directory /home/apis/djangoapp2>
Options +ExecCGI
<Files config.wsgi>
Require all granted
</Files>
</Directory>
</VirtualHost>
如何为端口 80 上的两个应用程序提供服务?
<VirtualHost *:80>
ProxyPreserveHost On
ProxyRequests Off
ServerName example.com
ServerAlias localhost
ProxyPassMatch "^/(apis/v1/hello$.*)" "http://127.0.0.1:8082/$1"
ProxyPassMatch "^/(apis/v1/hi$.*)" "http://127.0.0.1:8082/$1"
ProxyPassMatch "^/(apis/v1/wassup$.*)" "http://127.0.0.1:8083/$1"
ProxyPassMatch "^/(apis/v1/howdy$.*)" "http://127.0.0.1:8083/$1"
</VirtualHost>
访问 wassup 和 hello API 的两种方式:
http://example.com:8083/apis/v2/wassup?q=howsitgoing
http://example.com/apis/v2/wassup?q=howsitgoing
http://example.com:8082/apis/v2/hello?q=how are you
http://example.com/apis/v2/hello?q=howareyou
Django 代码按照Django 网站
上的建议,我已替换
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")
到
os.environ["DJANGO_SETTINGS_MODULE"] = "{{ project_name }}.settings"