标签: django

nginx反向代理中从www重定向到无www

我正在开发一个带有 nginx 反向代理和 Gunicorn 应用服务器的 Django 应用程序。作为一名新手 Web 开发人员,我需要将www流量重定向到no wwwWeb 服务器级别的帮助。我目前正在应用程序内的中间件级别执行相同的操作,但需要提高性能。

目前我的nginx虚拟主机文件布局如下:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=100m inactive=6m;

upstream my_server {
    server unix:/home/myuser/myproject/myfolder/myproject.sock  fail_timeout=0;
}

server {
    listen 80;
    server_name example.com www.example.com;

    # a bunch of 'location' blocks e.g. 'location /' or 'location @http_proxy_to_app', etc. 

}

server {

    listen 443 ssl;
    server_name example.com www.example.com;

    # SSL related stuff

    # a bunch of 'location' blocks e.g. 'location /' or 'location @http_proxy_to_app', etc.

}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我如何将www 重定向到 no-www …

nginx django redirect 301-redirect

2
推荐指数
1
解决办法
2450
查看次数

通过 Upstart 运行 Django 站点

我在我的一台 Ubuntu 服务器上托管了几个 Django 站点。直到最近,我一直在使用 Cherokee HTTPd,它可以选择启动后端应用程序,如 Django 站点,但我刚刚切换到 nginx。

在 cherokee 下,我只是“运行”Django 站点(站点存储在 中/web/):

cd /web/mywebsite/; python manage.py runfcgi workdir=/web/mywebsite method=threaded socket=/web/mywebsite/sock pidfile=/web/mywebsite/pid maxspare=3 maxrequests=500
Run Code Online (Sandbox Code Playgroud)

然后我将连接到/web/mywebsite/sock. Cherokee 也以我选择的用户身份运行它,就我而言www-data

在 Cherokee 下,这种方法对我很有效,但现在我要转向 nginx,我手头上没有什么东西可以进行流程管理。

环顾四周,实际上有数百种不同的管理方式。初始化脚本、cron 检查、daemontools。但是当我在 Ubuntu 上(可能永远都是)Upstart 似乎是有道理的......但我从哪里开始呢?

有人能给我一个新贵脚本的例子,它运行上面的脚本并且如果它死了会重新生成它吗?

我有几个 django 站点/web/(它们是该目录中唯一的目录)所以如果有一种欺骗方式我可以让这个新贵脚本启动它们(使用相同的设置)并监视它们,那就是超级超级棒。

django upstart

1
推荐指数
1
解决办法
1233
查看次数

服务器重启后无法通过主管启动 Gunicorn

我有一个使用 Nginx 和 Gunicorn 的 Django 应用程序“djngxgun”。我刚刚安装了 Supervisor,以便我可以使用它来管理我的 Gunicorn 进程。问题是在我重新启动服务器后,Supervisor 没有启动 Gunicorn。当我通过主管启动 Gunicorn 时(“sudo supervisorctl start djngxgun”),我看到在我的 Gunicorn error.log 文件中重复出现以下错误:

2014-02-28 15:36:47 [4753] [INFO] Starting gunicorn 18.0
Traceback (most recent call last):
  File "/home/djngxgun/venv/djngxgun/bin/gunicorn", line 9, in <module>
    load_entry_point('gunicorn==18.0', 'console_scripts', 'gunicorn')()
  File "/home/djngxgun/venv/djngxgun/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 71, in run
    WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()
  File "/home/djngxgun/venv/djngxgun/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 143, in run
    Arbiter(self).run()
  File "/home/djngxgun/venv/djngxgun/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 172, in run
    self.start()
  File "/home/djngxgun/venv/djngxgun/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 124, in start
    self.pidfile.create(self.pid)
  File "/home/djngxgun/venv/djngxgun/local/lib/python2.7/site-packages/gunicorn/pidfile.py", line 38, in create
    fd, fname = …
Run Code Online (Sandbox Code Playgroud)

python django supervisord gunicorn

1
推荐指数
1
解决办法
6127
查看次数

每 48 小时运行一次 cron 的正确语法是什么?

这能正常工作吗?

CELERYBEAT_SCHEDULE = {
    'task-number-one': {
        'task': 'project.users.tasks.send_something',
        'schedule': crontab(minute='*/2880'),
    }
}
Run Code Online (Sandbox Code Playgroud)

python django celery

1
推荐指数
1
解决办法
7788
查看次数

在服务器中运行单个 Web 应用程序 - 为什么不使用 root?

我有一台云服务器只托管一个网站(django + gunicorn + nginx),postgres 数据库将部署到另一台云服务器。

在这种情况下,我应该为我的网站创建特殊用户吗?似乎使用 root 更容易,并且它会带来更多的安全风险,但如果我只在那里托管一个应用程序,则不会太多?

security root django

1
推荐指数
1
解决办法
302
查看次数

Django 2.1 在 centos 7 上部署,使用 apache、mod_wsgi、python3 venv

我偶然发现了这个看似最相关的部署选项,因为指南似乎要么使用 python2 引用 mod_wsgi,要么在预期路径不同的基于 deb 的系统上进行部署。
所以我按照以下步骤操作:

#repos for python3.6, wsgi for python3.6
yum install epel-release centos-release-scl

#base packages
yum install python36 python36-devel httpd httpd-devel rh-python36-mod_wsgi

#python3.6 venv
cd /var/www; 
python36 -m venv django-venv
source django-venv/bin/activate
pip3 install django

#apache config to support wsgi
edit /etc/httpd/conf/httpd.conf to include
LoadModule wsgi_module modules/mod_wsgi.so
Run Code Online (Sandbox Code Playgroud)

Apache 配置服务位于 /var/www/mysite 的 django 内容

<VirtualHost *:80>
 ServerAdmin foo@mysite.com
 ServerName mysite.com
 ServerAlias www.mysite.com

 WSGIDaemonProcess mysite python-home=/var/www/django-venv/ python-path=/var/www/django-venv/lib/python3.6/site-packages
 WSGIProcessGroup mysite
 WSGIScriptAlias / /var/www/mysite/mysite/wsgi.py

 Alias /static /var/www/mysite/static
 <Directory /var/www/mysite/mysite/static>
  Require …
Run Code Online (Sandbox Code Playgroud)

python django mod-wsgi centos7

1
推荐指数
1
解决办法
7275
查看次数

apache 上的网站太多

我有一个虚拟主机太多的服务器,大约 500 个虚拟主机,其中一半使用 SSL。

所有这些主机都使用 mod_wsgi 为 Django 应用程序提供服务。

我注意到在一定数量的虚拟主机之后,我的所有服务器都停止工作并且所有站点都崩溃了,我可以使用以下行来处理降低每个虚拟主机的线程数:

WSGIDaemonProcess my.domain python-home=/var/www/env python-path=/var/www/my_app threads=1
Run Code Online (Sandbox Code Playgroud)

apache 在达到大约 1300 个线程时崩溃(当我检查 htop 时)。apache的错误日志显示没有找到Django模块,但这不是真正的错误,因为一切正常,只是在vhosts数量过高时发生。所以我认为我在 Linux 中的进程或线程达到了某种限制。我使用的是 Ubuntu 18.04、Apache 2.4,并且有足够的 RAM 和 CPU,服务器有 4 GB 的 RAM 并且只使用了 2 GB,平均 CPU 为 10% 到 20%。

我还检查了我的线程最大限制:

cat /proc/sys/kernel/threads-max
30893
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能在不创建另一台服务器的情况下增加我的 apache 中虚拟主机的容量。

linux ubuntu django mod-wsgi apache-2.4

1
推荐指数
1
解决办法
284
查看次数

具有不同 Python 版本的 mod_wsgi+Django

我的服务器默认运行 Python 2.4,我曾经make altinstall为我的 Django webapp 安装一个备用的 Python 2.6。

但是, mod_wsgi 似乎默认使用/usr/bin/python(2.4) 而不是/usr/local/bin/python2.6.

有没有一种简单的方法可以强制 mod_wsgi 使用 Python 2.6?

python django mod-wsgi

0
推荐指数
1
解决办法
6082
查看次数

通过 django 发送电子邮件不适用于 Gunicorn / NGinx`

我正在尝试从我的 django 应用程序发送电子邮件。

但是,这不适用于我的 NGINX(用于静态资源)+ GUNICORN 服务器。

但是,同样适用于 django 的默认网络服务器。到目前为止,我还没有设置邮件服务器本身。

我不确定问题是什么。

让我解释整个情况,因为这个问题没有得到很好的解释。

如果我使用默认调试 WSGI 从 Django 中的 Web 应用程序发送电子邮件,

和以下代码

from django.core.mail import send_mail

send_mail('Subject here', 'Here is the message.', 'from@example.com',
    ['to@example.com'], fail_silently=False)
Run Code Online (Sandbox Code Playgroud)

我可以发送电子邮件。

但是,我已经设置了一个 nginx 服务器和一个 gunicorn wsgi。我无法发送邮件。

我的 nginx.conf 看起来像这样

server {
        listen 80;
        listen 443;
        listen 587;
        server_name 172.17.110.205;
        client_max_body_size 0M;

        access_log /home/msrb_db/msrb_db_application/access.log;
        error_log /home/msrb_db/msrb_db_application/error.log;

        location /static {
                root /home/msrb_db/msrb_db_application;
        }

        location / {
                proxy_pass http://172.17.110.205:8080;
        }
}
Run Code Online (Sandbox Code Playgroud)

我有一个 gunicorn 服务器作为系统文件,其工作方式如下

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=msrb_db …
Run Code Online (Sandbox Code Playgroud)

email email-server nginx django gunicorn

-2
推荐指数
1
解决办法
2265
查看次数