我正在尝试将 Django 应用程序设置为使用 modwsgi 在 Apache 下运行。我定义了以下虚拟主机:
<VirtualHost *>
ServerName www.domain.com
ServerAlias domain.com
WSGIScriptAlias / /home/domain/apache/django.wsgi
<Directory /home/domain/apache>
Order deny,allow
Allow from all
Options -Indexes +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [QSA,L,R=301]
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
最后的重写规则是为了使 www.domain.com 成为规范的站点名称。但还是有什么问题。当我浏览到 > http://domain.com时,我被重定向到 > http://www.domain.com/django.wsgi/。浏览 > http://www.domain.com效果很好。
我的配置中是否缺少某些内容?谢谢。
更新:我将 RewriteRule 更改为
RewriteRule ^django.wsgi/(.*)$ domain.com/$1 [L,R=301].
Run Code Online (Sandbox Code Playgroud)
此更改解决了该问题。如果有人能详细说明为什么 /django.wsgi/ 部分最终出现在 URL 中,我将不胜感激。谢谢!
我使用本指南进行了设置,它为我的 django 应用程序服务了一段时间,但是在添加新的 django 模块后,没有触及任何 nginx 或 uwsgi 配置,现在服务器导致 502 502 Bad Gateway 错误。nginx error.log 说:
*1 上游在从上游读取响应头时提前关闭连接,客户端:xxxx,服务器:blabla.com,请求:“GET / HTTP/1.1”,上游:“uwsgi://127.0.0.1:4000”,主机:“ xxx"
我很欣赏你的提示来解决这个问题。
我正在运行 Ubuntu 10.04.1 LTS,它预装了 python2.6,但我需要用 python2.7.2 替换它。
(原因很简单,2.7 有很多从 3 向后移植的特性)
我已经安装了 python2.7.2 使用
./configure
make
make altinstall
Run Code Online (Sandbox Code Playgroud)
altinstall 选项将它安装到 /usr/local/lib/python2.7 并将解释器放置在 /usr/local/bin/python2.7 中,而不涉及系统默认版本
然后为了帮助 mod_wsgi 找到 python2.7,我将以下内容添加到 /etc/apache2/sites-available/wsgisite
WSGIPythonHome /usr/local
Run Code Online (Sandbox Code Playgroud)
我启动了 apache 并运行了一个测试 wsgi 应用程序,但是迎接我的是python 2.6.5 而不是 Python2.7
后来我替换了默认的 python simlink 指向 python 2.7
ln -f /usr/local/bin/python2.7 /usr/bin/python
Run Code Online (Sandbox Code Playgroud)
现在在控制台上输入 'python' 会打开 python2.7 但不知何故 mod_wsgi 仍然会选择 python2.6
接下来我尝试,
PATH=/usr/local/bin:$PATH
export PATH
Run Code Online (Sandbox Code Playgroud)
然后快速重启apache,但又是python2.6!
这是我的 $PATH
/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Run Code Online (Sandbox Code Playgroud)
/etc/apache2/sites-available/wsgisite 的内容
WSGIPythonHome /usr/local
<VirtualHost *:80>
ServerName wsgitest.local
DocumentRoot /home/wwwhost/pydocs/wsgi
<Directory /home/wwwhost/pydocs/wsgi>
Order …Run Code Online (Sandbox Code Playgroud) 我有一个由 mod_wsgi 和 Apache 提供的 Django Web 应用程序。我在生产系统中有 Web 应用程序的 apache 日志,日志包括以微秒为单位提供请求所需的时间。
我想查看此数据(按 URL 逐个查看),以查看应用程序的哪些部分(如果有)需要很长时间才能提供服务并且可能应该改进。是否有任何工具(在 Ubuntu Linux 上工作的 FLOSS),给定一个 apache 日志文件,将显示图表,漂亮的图片,计算统计信息等需要多长时间才能提供服务?(我先在这里问,以防其他人已经这样做了,并防止我重新发明轮子)
如果它将使用我的 Django urls.py 文件来聚合 url 并找出与其对应的视图,则奖励积分。
我正在通过 uwsgi 使用 nginx 运行 django 站点。问题是当流量变大时,uwsgi 进程会占用大量 CPU 时间。相同的配置在测试服务器上运行良好,并且 siege/ab 模拟大量并发流量。
这是 uwsgi 进程的一份 strace 日志。http://dl.dropbox.com/u/43017476/strace.log
还有一些 sysctl:
fs.file-max = 128000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.core.netdev_max_backlog = 4096
net.ipv4.tcp_max_syn_backlog = 4096
net.core.somaxconn = 250000
net.ipv4.tcp_keepalive_time = 300
Run Code Online (Sandbox Code Playgroud)
nginx conf 与 Google 的其他教程非常相似。我一直在试图弄清楚但没有运气。不过我发现了很多这样的作品:
22:12:02.932276 read(8, "\7\0\0\2\0\0\0\2\0\0\0", 16384) = 11
22:12:02.932504 poll([{fd=8, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout)
22:12:02.932547 write(8, "\17\0\0\0\3SET NAMES utf8", 19) = 19
22:12:02.932643 read(8, …Run Code Online (Sandbox Code Playgroud) 我在 Amazon RDS 上运行的 MySQL 5.5 数据库实例出现问题。定期(每两天一次)事务将无法完成并且似乎使表处于锁定状态。通常事务会超时,一切都恢复正常,但有几次事务保持打开状态,数据库继续消耗 CPU 时间和越来越多的内存,直到最终耗尽。我认为问题可能在于 django-reversion 与另一个应用程序(可能是 django-taggit 或 django-celery)冲突,这导致了这种奇怪的行为。
我想知道是否有人对这个特定问题有任何经验
编辑:这是 MySQL 最常抛出的错误
OperationalError: (1205, '超出锁定等待超时;尝试重新启动事务')
我是服务器技术新手。我知道如何获得 Apple iOS MDM 证书并使用 Apple iOS MDM 功能,我们必须: 1. 加入 Apple 的 iOS Developer Enterprise Program。2. 注册 3. 注册 MDM 应用程序。Apple 将颁发 MDM 证书。
现在,我想知道如何在我们的 MDM 服务器中安全地安装 Apple MDM 证书?
MDM Server 中是否有任何特定路径我们应该将证书保存在哪里?
编辑:我们在服务器端使用 Python/Django。
我收到一个错误:ImportError: No module named site根据我的 uWSGI 日志。
test_proj.ini:
[uwsgi]
chdir = /home/%n/app
module = %n.wsgi
home = /home/%n/app/venv
master = true
processes = 10
chmod-socket = 664
socket = /home/%n/uwsgi/socket
daemonize = /home/%n/uwsgi/log
pidfile = /home/%n/uwsgi/pid
Run Code Online (Sandbox Code Playgroud)
nginx:
server {
listen 8888;
server_name 192.168.88.187;
# Set up django static file serving
location /static {
alias /home/test_proj/app/static/;
}
# pass all non-static request to uWSGI
location / {
uwsgi_pass unix:///home/test_proj/uwsgi/socket;
include uwsgi_params;
}
}
Run Code Online (Sandbox Code Playgroud)
点冻结:
Django==1.7.1
django-braces==1.4.0
django-cors-headers==0.13
django-dynamic-settings==1.1.0
django-oauth-toolkit==0.7.2 …Run Code Online (Sandbox Code Playgroud) 在 Debian 服务器上运行 Django 应用程序时,您应该创建某种应用程序用户(例如“myappuser”)并以该用户身份运行 gunicorn 进程还是可以/应该以 root 身份运行 gunicorn ?以 root 身份运行它会产生安全风险吗?我已经使用 APT 安装了 gunicorn,而不是将其安装在虚拟环境中。以应用程序用户身份运行它似乎会使配置更加困难,因为您必须授予该用户写入日志文件、PID 文件等的权限。以 root 身份运行它似乎更容易。
exec gunicorn $DJANGO_WSGI_MODULE:application \
--name myapp \
--user=$USER \ # <- who should this be?
--group=$GROUP \
Run Code Online (Sandbox Code Playgroud) 我无法理解部署使用 uwsgi/gunicorn 的 Django 项目的“正确”方法是什么(我还没有决定使用什么,可能是 uwsgi,因为它具有更好的性能和建议?)和 nginx 使用码头工人。
我看到有些人把所有东西都放在同一个容器里。我不是 docker 的专家,但容器应该只做一 (1) 件事。因此,拥有 Django + nginx 似乎是 2 而不是 1。
现在,我的部署想法是:
有没有其他方法可以做到?有没有更深入地介绍这种情况的教程。我需要一个可靠的产品,而不仅仅是在我的电脑上测试一些代码。
django ×10
nginx ×4
uwsgi ×4
apache-2.2 ×2
gunicorn ×2
mod-wsgi ×2
mysql ×2
ubuntu ×2
502 ×1
amazon-rds ×1
certificate ×1
debian ×1
docker ×1
innodb ×1
log-files ×1
logging ×1
performance ×1
python ×1
rewrite ×1
security ×1