2016-04-14 54 views
4

我正在使用nginx(通过gunicorn)为瓶子应用程序提供静态文件。针对非默认静态位置的瓶子nginx和静态文件问题

在默认的静态文件夹的静态文件是工作的罚款:

<link rel="stylesheet" href="{{ url_for('static', filename='css/fa/font-awesome.min.css') }}" /> 

不过对此我想限制访问的登录用户只有我使用的瓶提供的静态文件夹等静态文件:

app.register_blueprint(application_view) 

application_view = Blueprint('application_view', __name__, static_folder='application_static') 

在HTML我这样,调用静态文件:

<link rel="stylesheet" href="{{ url_for('application_view.static', filename='css/main.css') }}" /> 

然后在应用程序/ application_static中我有受限制的静态文件。这在本地Flask安装上可以正常工作,但是当我使用Nginx提供的来自/ static文件夹的文件部署到生产计算机时,出现“NetworkError:404 Not Found - website.com/application_static/main.css”。

有关如何配置Ngix来处理此问题的任何想法?

conf.d/mysitename.conf文件:

upstream app_server_wsgiapp { 
    server localhost:8000 fail_timeout=0; 
} 

server { 
listen 80; 
server_name www.mysitename.com; 
rewrite ^(.*) https://$server_name$1 permanent; 
} 


server { 
    server_name   www.mysitename.com; 
    listen    443 ssl; 
    #other ssl config here 
    access_log   /var/log/nginx/www.mysitename.com.access.log; 
    error_log    /var/log/nginx/www.mysitename.com.error.log info; 
    keepalive_timeout  5; 
    # nginx serve up static files and never send to the WSGI server 
    location /static { 
    autoindex on; 
    alias /pathtositeonserver/static; 
    } 

    location/{ 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header Host $http_host; 
     proxy_redirect off; 
     if (!-f $request_filename) { 
     proxy_pass http://app_server_wsgiapp; 
     break; 
    } 
    } 

    # this section allows Nginx to reverse proxy for websockets 
    location /socket.io { 
    proxy_pass http://app_server_wsgiapp/socket.io; 
    proxy_redirect off; 
    proxy_buffering off; 

    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_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection "Upgrade"; 
    } 
} 

nginx.conf:

user www-data; 
worker_processes 4; 
pid /run/nginx.pid; 

events { 
     worker_connections 768; 
     # multi_accept on; 
} 

http { 
    sendfile on; 
    tcp_nopush on; 
    tcp_nodelay on; 
    keepalive_timeout 65; 
    types_hash_max_size 2048; 

    include /etc/nginx/mime.types; 
    default_type application/octet-stream; 

    access_log /var/log/nginx/access.log; 
    error_log /var/log/nginx/error.log; 

    include /etc/nginx/conf.d/*.conf; 
    include /etc/nginx/sites-enabled/*; 
} 
+0

显示一些nginx配置和应用程序的更多细节。 – iurisilvio

+0

在本地机器上运行烧瓶wsgi服务器还是gunicorn?你还可以发布你的nginx conf文件吗? – lesingerouge

+0

@iurisilvio道歉我没有早点回来,我一直在另一个项目上。我已经添加了conf.d和nginx conf文件。我在我的本地开发环境中运行烧瓶打包服务器。 –

回答

1

gunicorn将有旧代码仍然在运行,除非你重新加载配置文件。

您要么停止并重新启动gunicorn,要么发送一个HUP信号给gunicorn进程。

+1

我正在重新加载所有配置文件,并在每次部署时停止并重新启动gunicorn。 –