我正在 AWS elastic beanstalk 上运行 django 应用程序,并且收到尝试扫描漏洞的机器人发送的垃圾邮件。它会导致大量错误,例如:
(其中 xx.xxx.xx.xx 是我的 ec2 实例的 IP 地址。)
DisallowedHost at //www/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
Invalid HTTP_HOST header: 'xx.xxx.xx.xx'. You may need to add 'xx.xxx.xxx.xx' to ALLOWED_HOSTS.
Run Code Online (Sandbox Code Playgroud)
我的合法用户只能使用域名访问该网站。我一直在尝试找出如何修改我的 nginx 配置以阻止所有未寻址到 *.mydomain.com 或 mydomain.com 的连接。
我根据需要动态添加和删除子域,因此我为子域使用通配符。
AWS Elastic beanstalk 为我生成以下默认配置文件:
/etc/nginx/nginx.conf
#Elastic Beanstalk Nginx Configuration File
user nginx;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
worker_processes auto;
worker_rlimit_nofile 32788;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" …Run Code Online (Sandbox Code Playgroud) 我想知道之前是否有人使用 uwsgi 和 nginx 来服务高负载 django 站点。如果是这样,他们有什么问题吗?
我正在使用 django、nginx 和 apache。当我使用 URL(例如http://www.foo.com/)访问我的站点时,我的浏览器地址中出现的是附加了 admin 的 IP 地址(例如http://123.45.67.890/admin/)。当我通过 IP 访问该站点时,它会按预期被 django 的 urls.py 重定向(例如,http://123.45.67.890/ -> http://123.45.67.890/accounts/login/?next=/)
我希望名称 URL 的行为方式与 IP 相同。也就是说,如果 URL 转到新视图,则浏览器地址中的主机应保持不变,不会更改为 IP 地址。我应该去哪里解决这个问题?
我的文件:
; cpa.com (apache)
NameVirtualHost *:8080
<VirtualHost *:8080>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/htm
DocumentRoot /path/to/root
ServerName www.foo.com
<IfModule mod_rpaf.c>
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
</IfModule>
<Directory /public/static>
AllowOverride None
AddHandler mod_python .py
PythonHandler …Run Code Online (Sandbox Code Playgroud) 我有一个网站,有来自香港和澳大利亚的用户。
不幸的是,由于服务器位于澳大利亚,来自香港的用户会遇到延迟问题。在返回澳大利亚之前,交通必须经过美国。
所以我也在香港设置了一个服务器,使用 .hk TLD 的用户将被重定向到香港的网络服务器。它与澳大利亚服务器共享同一数据库服务器,但由于积极的 SQL 查询缓存,SQL 查询延迟对性能的影响可以忽略不计。
但是对于习惯了香港网站但后来前往澳大利亚的用户来说,他们会遭受额外的延迟,因为即使他们在澳大利亚,他们也会访问重定向到香港服务器的 .hk 网站。该网站面向来自香港的国际学生,所以这对我来说是一个重要的问题。
我如何根据用户的位置重定向用户,而不是根据 TLD 将用户重定向到最近的 Web 服务器?
目前我正在使用 nginx、postgres 和 Django。假设我知道如何根据用户的 IP 地址估计用户的位置,我下一步要做什么?我会在什么水平上工作?我应该阅读什么主题?
我有一个使用基于 nginx、uWSGI 和 Django 构建的 API 的 web 应用程序。最近我在一个特定的 API 调用中看到了很多 harakiris,它执行一些快速处理,然后产生一些线程来处理一些长时间运行的函数。然后主线程返回,工作线程将结果存储在缓存中并退出。线程生成后,它们之间没有交互。
我的 uWSGI 设置为 20 秒的 harakiri。这应该是主线程完成并返回的充足时间(平均约为 2-3 秒)。uWSGI 是否有可能是 harakiri-ing 因为我的工作线程需要太长时间才能返回?如果是这样,我可以通过在 python 中使用多处理而不是多线程来解决这个问题吗?
谢谢!
我正在尝试在主管中运行 gunicorn_django 进程,但它总是立即退出,并出现此错误:
INFO exited: my_app (exit status 1; not expected)
INFO received SIGCLD indicating a child quit
INFO gave up: my_app entered FATAL state, too many start retries too quickly
Run Code Online (Sandbox Code Playgroud)
我的服务器脚本如下所示:
#!/bin/bash
set -e
LOGFILE=/var/log/gunicorn/my_app.log
LOGDIR=$(dirname $LOGFILE)
NUM_WORKERS=3
USER=my-www-user
GROUP=my-www-user
cd /home/my-www-user/my_app
source /home/my-www-user/.virtualenvs/my_app/bin/activate
test -d $LOGDIR || mkdir -p $LOGDIR
gunicorn_django -w $NUM_WORKERS --debug \
--user=$USER --group=$GROUP \
--log-level=debug --log-file=$LOGFILE 2>>$LOGFILE\
--pythonpath=my_app --settings=settings.active \
my_app.wsgi:application
Run Code Online (Sandbox Code Playgroud)
我的主管配置如下所示:
[program:my_app]
directory=/home/my-www-user/my_app/
user=my-www-user
command=/home/my-www-user/my_app/server.sh
stdout_logfile=/var/log/supervisor/my_app.log
stderr_logfile=/var/log/supervisor/my_app-error.log
autostart=true
autorestart=true
Run Code Online (Sandbox Code Playgroud)
当我su进入my-www-user …
即使我按照官方说明进行操作,当我使用 uWSGI 启动 Django 测试站点时,也不会加载管理界面的 CSS 文件。例如http://localhost:8443/static/admin/css/base.css,如果我打开 CSS 文件的 URL,则会收到 404 错误。我搜索了本地文件,我猜它的路径是/usr/local/lib/python3.3/dist-packages/django/contrib/admin/static/admin/css/base.css; 所以我也尝试以 root 身份运行 uwsgi,但没有任何改变。
我使用没有问题python3 manage.py runserver。如果我打开http://localhost:8000/static/admin/css/base.css,文件将加载到浏览器中,并将样式应用于管理页面。
这是我在 bash 中执行的命令:
uwsgi --ini ~/.uwsgi/conf/django.ini --set-placeholder project_name=mysite --set-placeholder port=8443
Run Code Online (Sandbox Code Playgroud)
这是 django.ini 的内容:
[uwsgi]
module = %(project_name).wsgi:application
https = :%(port),/usr/local/nginx/conf/server.crt,/usr/local/nginx/conf/server.key,HIGH
strict = true
chdir = /home/marco/django-projects/%(project_name)
env = DJANGO_SETTINGS_MODULE=%(project_name).settings
socket = /home/marco/.uwsgi/%(project_name).socket
pidfile = /home/marco/.uwsgi/%(project_name).pid
daemonize = /home/marco/.uwsgi/%(project_name).log
master = true
enable-threads = true
harakiri = 20
max-requests = 5000
vacuum …Run Code Online (Sandbox Code Playgroud) 我的服务器上有多个 django 应用程序,每个应用程序都在自己的虚拟主机中运行,绑定到不同的端口。(我这样做是为了隔离每个 WSGIProcessGroup)。
现在,为了简单起见,我想将每个应用程序代理到端口 80。
对于一个应用程序,我做这样的事情:
Listen 8101
<VirtualHost 127.0.0.1:8101>
WSGIProcessGroup app1
WSGIDaemonProcess app1 display-name=%{GROUP}
WSGIScriptAlias /app1 "/var/django_apps/app1/app1.wsgi"
</VirtualHost>
<VirtualHost *:80>
ProxyPass /app1 http://localhost:8101/app1
ProxyPassReverse /app1 http://localhost:8101/app1
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
现在,为了简单地启用或禁用某些应用程序,当我运行另一个应用程序时,我有另一个 .conf 文件包含以下内容:
Listen 8102
<VirtualHost 127.0.0.1:8102>
WSGIProcessGroup app2
WSGIDaemonProcess app2 display-name=%{GROUP}
WSGIScriptAlias /app2 "/var/django_apps/app2/app2.wsgi"
</VirtualHost>
<VirtualHost *:80>
ProxyPass /app2 http://localhost:8102/app2
ProxyPassReverse /app2 http://localhost:8102/app2
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
但是这第二个<VirtualHost *:80>没有使用,考虑到 apache 配置语法,这似乎很正常。
但是,我希望将这一点配置放在应用程序声明的旁边,这样我就可以将属于一起的内容放在一个文件中。
有什么我可以做的吗?我正在考虑以某种方式使用 include 指令,但我对 apache 配置知之甚少,而且我认为我无法自己找到解决方案:)
你怎么认为?
干杯
我正在运行一个使用 PostgreSQL 的 Django 应用程序。服务器正在运行带有 SELinux 的 RHEL 6.5。我遇到了 Django 应用程序无法连接到数据库的问题,我认为这是因为 SELinux 阻止了它。这是我在 Django 中看到的错误:
could not connect to server: Permission denied
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
我怎样才能解决这个问题?我遇到了这篇文章,但我不确定如何将解决方案 ( chcon -t postgresql_exec_t /path/to/pgbouncer) 应用于我的问题。
谢谢!
[编辑]
这是/var/log/audit/audit.log我尝试访问该站点时的样子:
type=AVC msg=audit(1396289984.549:9245): avc: denied { write } for pid=16975 comm="httpd" name=".s.PGSQL.5432" dev=sda1 ino=2359354 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:tmp_t:s0 tclass=sock_file
type=SYSCALL msg=audit(1396289984.549:9245): arch=c000003e syscall=42 success=no exit=-13 a0=10 a1=7fe625273aa0 a2=6e a3=0 items=0 ppid=16943 pid=16975 auid=22383 …Run Code Online (Sandbox Code Playgroud) 我正在使用 apache 网络服务器和 mod_wsgi 将请求传输到 django。
$ apache2ctl -v
Server version: Apache/2.4.10 (Raspbian)
Server built: Sep 17 2016 16:40:43
Run Code Online (Sandbox Code Playgroud)
我正在使用这个 apache 站点来声明 django 应用程序:
ServerName example.com
DocumentRoot /srv/webapps/myapp
<Directory /srv/wepapps/myapp/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess example.com python-path=/srv/webapps/myapp:/usr/local/lib/python3.4/dist-packages:/usr/lib/python3/dist-packages
WSGIProcessGroup example.com
WSGIScriptAlias / /srv/webapps/myapp/mysite/wsgi.py
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但如果引发异常,它会显示错误 500,但我的example.com_error.log. 如果我将设置修改为 set Debug = True,我可以在 Web 浏览器中看到错误,但在我的 /var/log/apache2 文件中也可以看到错误。但我真的不想在我的生产环境中保留这个设置。
你知道为什么我必须Debug = True允许 django 写入系统日志吗?
在此先感谢您的回答,如果我在英语方面犯了一些错误,我深表歉意;-)
django ×10
nginx ×5
python ×3
uwsgi ×3
apache-2.2 ×2
apache-2.4 ×1
gunicorn ×1
logging ×1
mod-proxy ×1
mod-wsgi ×1
postgresql ×1
redhat ×1
selinux ×1
supervisord ×1
threads ×1
url ×1
virtualhost ×1