假设我有 2 个站点(超级用户和 Serverfault)在一个机器上从他们自己的 Apache 虚拟主机运行。这两个站点由 Django 提供支持,并使用 mod-wsgi 在 Apache 上运行。站点之一的典型配置文件如下所示:
WSGIDaemonProcess serverfault.com user=www-data group=www-data processes=5
Run Code Online (Sandbox Code Playgroud)
主机是一台运行 Ubuntu 的具有 4GB RAM 的 linux 机器。任何人都可以建议我应该在上面为我的 2 个站点指定的进程数吗?假设它们与实际的超级用户和 Serverfault 站点具有相同的流量。
我正在尝试在我的 Ubuntu 机器上设置 MOD_WSGI。我找到了说我需要执行以下步骤的步骤,我在http://ubuntuforums.org/showthread.php?t=833766
Run Code Online (Sandbox Code Playgroud)<Directory /var/www/> Options Indexes FollowSymLinks MultiViews ExecCGI AddHandler cgi-script .cgi AddHandler wsgi-script .wsgi AllowOverride None Order allow,deny allow from all </Directory>
创建了 test.wsgi
def application(environ, start_response):
status = '200 OK'
output = 'Hello World!'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
Run Code Online (Sandbox Code Playgroud)第 2 步失败,因为它说即使 apt-get 找到它也找不到 mod-wsgi。如果我继续执行这些步骤,python 应用程序只会在浏览器中显示为纯文本。
任何想法我做错了什么?
编辑:问题的结果
automatedtester@ubuntu:~$ dpkg -l libapache2-mod-wsgi
Desired=Unknown/Install/Remove/Purge/Hold …Run Code Online (Sandbox Code Playgroud) 我有一个可以使用标准开发环境在本地运行的 django 应用程序。我现在想将其移至 EC2 进行生产。django 文档建议使用 apache 和 mod_wsgi 运行,并使用 nginx 加载静态文件。
我在 Ec2 机器上运行 Ubuntu 12.04。我的 Django 应用程序“ddt”包含一个带有 ddt.wsgi 的子目录“apache”
import os, sys
apache_configuration= os.path.dirname(__file__)
project = os.path.dirname(apache_configuration)
workspace = os.path.dirname(project)
sys.path.append(workspace)
sys.path.append('/usr/lib/python2.7/site-packages/django/')
sys.path.append('/home/jeffrey/www/ddt/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'ddt.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
Run Code Online (Sandbox Code Playgroud)
我从 apt 安装了 mod_wsgi。我的 apache/httpd.conf 包含
NameVirtualHost *:8080
WSGIScriptAlias / /home/jeffrey/www/ddt/apache/ddt.wsgi
WSGIPythonPath /home/jeffrey/www/ddt
<Directory /home/jeffrey/www/ddt/apache/>
<Files ddt.wsgi>
Order deny,allow
Allow from all
</Files>
</Directory>
Run Code Online (Sandbox Code Playgroud)
在 apache2/sites-enabled 下
<VirtualHost *:8080>
ServerName www.mysite.com
ServerAlias mysite.com
<Directory /home/jeffrey/www/ddt/apache/>
Order deny,allow …Run Code Online (Sandbox Code Playgroud) 我目前正在运行 Centos 6.4 服务器,Apache 2.2.15 和 mod_wsgi 3.2。服务器托管基于 django 的站点(django 1.5.1,python 2.6.6)。一切都运行良好,直到我通过 pip 安装了 scipy 0.12.0。现在,当我尝试加载 django 应用程序时,服务器没有响应,并且产生的子 httpd 进程似乎挂起。查看我的日志(/var/logs/httpd/error_log、我的 vhost error.log 和我的系统日志)没有发现任何错误。
如果我通过 django manage.py shell 加载我的模型等,一切正常,这让我相信这是一个 mod_wsgi 问题。
关于如何开始解决这个问题的任何想法?
系统配置:Apache2、Django 1.10、Python 3、Ubuntu 16.04 LTS
姜戈debug=True。
/var/log/apache2/error.log
[52:53.057967] [wsgi:error] [pid 4303] [client 1.1.1.22:24409] Timeout when reading response headers from daemon process 'example.org': /home/user/dir/project/main_app/wsgi.py
[52:58.466726] [wsgi:error] [pid 4305] [client 1.1.1.10:9787] Truncated or oversized response headers received from daemon process 'example.org': /home/user/dir/project/main_app/wsgi.py
[52:58.466729] [wsgi:error] [pid 4304] [client 1.1.1.4:18417] Truncated or oversized response headers received from daemon process 'example.org': /home/user/dir/project/main_app/wsgi.py
[52:58.466726] [wsgi:error] [pid 4307] [client 1.1.1.22:35116] Truncated or oversized response headers received from daemon process 'example.org': /home/user/dir/project/main_app/wsgi.py
[52:58.466756] [wsgi:error] [pid 4306] …Run Code Online (Sandbox Code Playgroud) 使用 Apache bench 在 AWS 小实例 (Ubuntu 10.04) 上对 django 1.21/Apache/mod_wsgi 配置进行负载测试时,在低并发请求下显示出极高的 CPU 负载(使用正常运行时间和 vmstat):
ab -c 5 -n 1000 "my_url"
Run Code Online (Sandbox Code Playgroud)
...导致此正常运行时间输出:
18:04:54 up 9 days, 16:54, 3 users, load average: 5.33, 2.45, 1.91
Run Code Online (Sandbox Code Playgroud)
即使 Apache bench 并发值为 2,CPU 仍为 100%。我正在同一区域/区域中的不同 AWS 实例中运行 Apache bench。关于问题出在哪里的想法,或者我应该如何继续调试?
细节:
这是负载测试之前/期间/之后的 vmstat 输出:
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的本地 ubuntu 机器上使用 django 应用程序。但是,该站点无法正常工作,并且我的站点中/var/log/apache2/errors.log充满了如下消息:
ImportError: No module named site
Run Code Online (Sandbox Code Playgroud)
我的/var/log/apache2/error.log(今天)看起来像这样:
$ cat error.log | uniq -c
1 [Wed Jun 29 09:37:37 2011] [notice] Apache/2.2.17 (Ubuntu) mod_wsgi/3.3 Python/2.7.1+ configured -- resuming normal operations
12966 ImportError: No module named site
Run Code Online (Sandbox Code Playgroud)
这是当我打开机器时它启动的通知,然后是 12,966 行都在说no module named site消息
请注意缺少日期时间字段。即使不访问网站(即,即使不发出网络请求),也会重复这些错误。在浏览器中访问网站时,它只是挂起,好像在等待大量下载。
我正在使用 python 2.5 virtualenv,其中安装了很多包(包括 django 1.1)和 pip。我已经加载了 mod_wsgi:
$ ls -l /etc/apache2/mods-enabled/wsgi*
lrwxrwxrwx 1 root root 27 2010-10-04 16:50 /etc/apache2/mods-enabled/wsgi.conf -> ../mods-available/wsgi.conf
lrwxrwxrwx 1 root …Run Code Online (Sandbox Code Playgroud) 我已经使用 WSGI 开发了一个简单的 Python Web 服务,并希望使用 Elastic Beanstalk 将其部署到 AWS 云中。我的问题是我无法在云中正确配置我在 Elastic Beanstalk 配置中指定的所有选项。
对于部署,我使用 Elastic Beanstalk CLI 实用程序。我已经运行eb init命令并设置了所需的参数。之后,.elasticbeanstalk在我的源代码树中创建了一个名为的目录。它有两个用于部署的配置文件,即config和optionsettings. 其他选项中的后一个包含必须/etc/httpd/conf.d/wsgi.conf在实例中更新的 WSGI 配置。经过我的一些调整后,该文件具有以下设置:
[aws:elasticbeanstalk:application:environment] DJANGO_SETTINGS_MODULE = 参数 1 = 参数 2 = 参数 4 = 参数3 = 参数 5 = [aws:elasticbeanstalk:container:python] WSGIPath = handler.py NumProcesses = 2 静态文件 = /静态= 线程数 = 10 [aws:elasticbeanstalk:container:python:staticfiles] /静态=静态/ [aws:elasticbeanstalk:hostmanager] LogPublicationControl = false [aws:自动缩放:启动配置] InstanceType = t1.micro EC2KeyName = zmicier-aws [aws:elasticbeanstalk:应用程序] …
如何使用 yum 在 CentOS 上安装 wsgi?是否有任何带有 mod_wsgi 的存储库?
我使用 Nginx 作为使用 HTTP 身份验证的 Apache 服务器的反向代理。出于某种原因,我无法将 HTTP_AUTHORIZATION 标头传递给 Apache,它似乎被 Nginx 过滤掉了。因此,没有请求可以进行身份验证。
请注意,基本身份验证是动态的,因此我不想在我的 nginx 配置中对其进行硬编码。
我的 nginx 配置是:
server {
listen 80;
server_name example.co.uk ;
access_log /var/log/nginx/access.cdk-dev.tangentlabs.co.uk.log;
gzip on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 120;
location / {
proxy_pass http://localhost:81/;
}
location ~* \.(jpg|png|gif|jpeg|js|css|mp3|wav|swf|mov|doc|xls|ppt|docx|pptx|xlsx|swf)$ {
if (!-f $request_filename) {
break;
proxy_pass http://localhost:81;
}
root /var/www/example;
}
}
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会这样?
更新- 原来这个问题是我在我的原始问题中忽略的:mod_wsgi。这里有问题的站点是一个 Django 站点,事实证明 Apache 确实通过了 auth 变量,但是 mod_wsgi 将它们过滤掉了。
决议是使用:
WSGIPassAuthorization On
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅http://www.arnebrodowski.de/blog/508-Django,-mod_wsgi-and-HTTP-Authentication.html
mod-wsgi ×10
apache-2.2 ×6
django ×6
python ×3
wsgi ×3
nginx ×2
apache2 ×1
centos ×1
deployment ×1
ubuntu ×1