我有Nginx坐在gunicorn前面,反过来坐在django应用程序的前面。 核心问题是“为什么我的回复没有被caching?” 但是,我非常青睐这个,所以这里是关于应该发生什么的假设(如果我的核心理解是有缺陷的)。 请求点击Nginx请求来自REST服务的某个json 。 Nginx在它的caching中没有这个,所以它传递给了Gunicorn/Django 。 生成一个响应,通过Nginx传回,在那里被caching,最后返回给客户端。 然后! 请求B进来要求相同的资源。 Nginx在它的caching中,因此直接服务它,永远不会碰到Django的应用程序。 基于这个假设,经过大量的阅读后,我终于在我的sites-enabled了这个最小的nginxconfiguration: proxy_cache_path /tmp/nginx keys_zone=one:20m inactive=60m; proxy_cache_key "$host$request_uri"; server { listen 8080; server_name localhost; proxy_cache one; location / { add_header X-Proxy-Cache $upstream_cache_status; proxy_ignore_headers X-Accel-Expires Expires Cache-Control; proxy_pass http://127.0.0.1:8000; } } 这段代码是基于nginxcaching的文档和这里的教程。 如果我testing一些请求,我得到这个回应: curl -X GET -I http://localhost:8080 HTTP/1.1 200 OK Server: nginx/1.4.6 (Ubuntu) Date: Wed, […]
我总是获得本地主机作为远程IP。 我的应用程序运行在Nginx-Gunicorn下 这是我对nginx的configuration: server { listen 80; server_name api.mydomain.com; charset utf-8; client_max_body_size 1M; location / { set_real_ip_from 127.0.0.1/32; proxy_set_header X-Forwarded-Host $host:$server_port; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://aiohttp; } access_log /var/log/nginx/api_access.log; error_log /var/log/nginx/api_error.log; } 这是我的日志格式gunicorn: access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"' 而我的gunicorn日志是这样的: 127.0.0.1 – – [28/Apr/2017:12:52:53 +0000] "GET /entrypoint?p=2&d=123456 […]
信息和先决条件: 我有一个项目,其核心是一个基本的CRUD应用程序。 它没有长时间运行的后台进程,一开始就会分叉,后面会谈,也没有长时间运行的查询或连接请求。 它接收到一个请求,对数据库进行一些查询,然后作出响应。 为了快速提供静态文件和可擦写文件,我将在所有情况下使用Varnish。 这是我的问题: 在阅读了各种Python Web应用程序服务器之后,我看到他们都有自己的“粉丝”,通常是“个人”的理由,这让我感到困惑,因为每个用例都与下一个不同。 我如何才能了解Python Web服务器的核心区别因素(按顺序)来决定它们对于我的项目来说是多么适合,哪一个会比另一个更好? 你在这个问题上有什么(技术上可certificate的)想法? 我应该如何select一个Python Web服务器? 谢谢。
我有一个在开发服务器上工作的Django项目,我正在尝试将它移到Ubuntu生产服务器上。 我已经开始了,取得了明显的成功,一个“python manage.py run_gunicorn 0.0.0.0:8000”,但我试图连接到它通过定期浏览器指向http://JonathansCorner.com:8000/是超时。 (当我手动运行“telnet localhost 8000”,并给出一个GET请求,它打印出适当的HTML。)UFW被禁用。 我能做些什么来让外面的港口80上使用Gunicorn?
获取“403访问被拒绝”错误,而不是服务文件(使用django,gunicorn nginx) 我正在尝试使用nginx从django提供私人文件。 对于X-Access-Redirect设置,我遵循以下指南 http://www.chicagodjango.com/blog/permission-based-file-serving/ 这是我的网站configuration文件(/ etc / nginx / site-available / sitename): server { listen 80; listen 443 default_server ssl; server_name localhost; client_max_body_size 50M; ssl_certificate /home/user/site.crt; ssl_certificate_key /home/user/site.key; access_log /home/user/nginx/access.log; error_log /home/user/nginx/error.log; location / { access_log /home/user/gunicorn/access.log; error_log /home/user/gunicorn/error.log; alias /path_to/app; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme […]
我试图在我自己的服务器上部署一个readthedocs实例。 推荐的部署方式是使用Gunicorn + nginx和postgres。 因为基本上没有关于如何执行此操作的文档(除了他们的fabfiles,当然只能在他们的服务器上运行),我一直在尝试手动设置自己的服务器。 这是我的nginx.conf : server { listen 80 default; server_name mysite.com; access_log /var/log/nginx/mysite.access.log; error_log /var/log/nginx/mysite.error.log; location /favicon.ico { root /home/mysite/Code/checkout/readthedocs.org/media/images; break; } location robots.txt { root /home/mysite/Code/checkout/readthedocs.org/media; break; } location /static/ { alias /home/mysite/Code/checkout/readthedocs.org/media/; expires 30d; break; } location /media/ { alias /home/mysite/Code/checkout/readthedocs.org/media/; expires 30d; break; } location / { proxy_pass_header Server; […]
我的部署用户是否需要属于Upstart的sudoer列表才能启动GUnicorn? 这是我的Upstart日志中的错误 部署不在sudoers文件中。 这个事件将被报道。 它工作正常,如果我不指定setuid和setgid。 但是我怀疑以root身份运行这个过程并不是一个好主意。 这是我正在运行的暴发户脚本: 说明“Gunicorn for django_instance” 在运行级别上启动(文件系统)停止[016] 重生的控制台日志 #将这些设置为nobody,并且nogroup也不起作用#setuid nobody#setgid nogroup setuid部署 setgid部署 脚本 chdir /home/deploy/django_instance exec sudo -u deploy -g deploy /home/deploy/venvs/test_env/bin/gunicorn django_instance.wsgi:application 结束脚本
运行我的Django应用程序时,出现错误:当我发出超过7800字节的请求时,我看到gunicorn出现以下错误: "Error opening file for reading: Permission denied". 然后它丢弃请求,并且nginx得到“连接重置由同辈”错误。 如果我运行Django开发服务器,这不会发生。 奇怪的是,如果我向一个无效的URL发出请求,无论发布什么内容长度,我都会得到标准的Djangodebugging网页。 因此,似乎是gunicorn如何处理Django在处理有效的查看URL请求时正在做的事情。 这是在Ubuntu 12.04上运行。 我已经尝试运行Gunicorn作为根,它仍然发生。 我在进一步的debugging方面有点不知所措。 我试着设置tmp_upload_dir到一个目录将完全权限incase这是一个问题,但没有运气。 任何build议真的会被赞赏。
我试图寻找一个这样的解决scheme,但不能find任何文档/提示我的具体设置。 我的设置: 后端服务器:ngnix:virtualenv中运行gunicorn / python / django的2个不同网站(2个顶级域名)后端服务器硬件(VPS)2gb ram,8个CPU 数据库服务器:postgresql – pg_bouncer 后端服务器硬件(VPS)1GB RAM,8个CPU 清漆服务器:只运行清漆 Varnishserver硬件(VPS)1GB内存,8个CPU 我试图build立一个清漆服务器来处理罕见的stream量高峰(20 000个唯一请求/秒)当电视节目提到其中一个网站时,就会发生峰值。 我需要做些什么,使清漆服务器caching我的后端服务器上的两个网站/域? 我的/etc/varnish/default.vcl: backend django_backend { .host = "local.backendserver.com"; .port = "8080"; } 我的/usr/local/nginx/site-avaible/domain1.com upstream gunicorn_domain1 { server unix:/home/<USER>/.virtualenvs/<DOMAIN1>/<APP1>/run/gunicorn.sock fail_timeout=0; } server { listen 80; listen 8080; server_name domain1.com; rewrite ^ http://www.domains.com$request_uri? permanent; } server { listen 80 default_server; […]
我已经在Django + gunicorn + virtualenv + Supervisord环境下成功运行了2个django项目(与Python 2.7一样的virtualenv)。 但现在我试图在Python 3.2.3中运行另一个项目,所以我创build了另一个virtualenv。 但现在,当我尝试启动django服务器与supervisorctl命令它给我mein'exception终止'错误。 但是在错误日志中完成跟踪错误是这样的: Error: class uri 'simple' invalid or not found: [Traceback (most recent call last): File "/home/ubuntu/.virtualenvs/django16/lib/python3.2/site-packages/gunicorn/util.py", line 125, in load_class section, uri) File "/home/ubuntu/.virtualenvs/django16/lib/python3.2/site-packages/pkg_resources.py", line 378, in load_entry_point return get_distribution(dist).load_entry_point(group, name) File "/home/ubuntu/.virtualenvs/django16/lib/python3.2/site-packages/pkg_resources.py", line 371, in get_distribution if isinstance(dist,Requirement): dist = get_provider(dist) File "/home/ubuntu/.virtualenvs/django16/lib/python3.2/site-packages/pkg_resources.py", […]