在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Python  Linux/ nginx+django 502 bad gateway 初學(xué)者問(wèn)題。

nginx+django 502 bad gateway 初學(xué)者問(wèn)題。

沒(méi)用過(guò)nginx,如果問(wèn)題太弱智請(qǐng)輕噴T_T
想試著把django部署到nginx上面去,于是就看了readthedocs 上面的教程。一步步操作都還順利,但是到Using Unix sockets instead of ports 這一步的時(shí)候就出錯(cuò)了,翻了/var/log/nginx/error.log 發(fā)現(xiàn)是權(quán)限的問(wèn)題,如下

2017/12/22 21:55:13 [crit] 12682#12682: *3 connect() to unix:///media/eureka/Myzone/lanShare/mysite.sock failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: 127.0.0.1, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:///media/eureka/Myzone/lanShare/mysite.sock:", host: "localhost:8000"

目錄結(jié)構(gòu)是這樣子的

/media/eureka/Myzone/lanShare
                        test.py
                        /lanShare/
                              lanShare_nginx.conf\
                              -> /etc/nginx/sites-enabled/lanShare_nginx.conf
                            

test.py文件內(nèi)容如下

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"] # python3

lanShare_nginx.conf 文件內(nèi)容如下

upstream django {
    server unix:///media/eureka/Myzone/lanShare/mysite.sock ; # for a file socket
    # server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}

# configuration of the server
server {
    # the port your site will be served on
    listen      8000;
    # the domain name it will serve for
    server_name 127.0.0.1; # substitute your machine's IP address or FQDN
    charset     utf-8;

    # max upload size
    client_max_body_size 75M;   # adjust to taste

    # Django media
    location /media  {
        alias /media/eureka/Myzone/lanShare/lanShare/media;  # your Django project's media files - amend as required
    }

    location /static {
        alias /media/eureka/Myzone/lanShare/lanShare/static; # your Django project's static files - amend as required
    }

    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass  django;
        include     /media/eureka/Myzone/lanShare/lanShare/uwsgi_params; # the uwsgi_params file you installed
    }
}

test.py 所在目錄運(yùn)行uwsgi 命令如下

$ uwsgi --socket mysite.sock --wsgi-file test.py

然后重啟nginx,在瀏覽器中打開(kāi)127.0.0.1:8000 就是502了

嘗試過(guò)的方法

  • 教程上的加上--chmod-socket=666
  • 當(dāng)前用戶(hù)已加入www-data
  • 運(yùn)行uwsgi時(shí)加上了--uid www-data --gid www-data
  • 搜了一通SO沒(méi)找到解決辦法

以上方法都沒(méi)有解決我的問(wèn)題,不用unix socket是可以訪(fǎng)問(wèn)的,也就是改變配置文件里upstream,然后

uwsgi --socket :8001 --wsgi-file test.py

都糾結(jié)一下午了,希望各位幫忙

OS: ubuntu 16.04

回答
編輯回答
陪她鬧

uwsgi文檔很坑, 把你的項(xiàng)目目錄的權(quán)限改成www-data就行了, 另外, 可以考慮用gunicorn, 性能不比uwsgi差多少, 但是文檔寫(xiě)的很清晰

2017年12月18日 20:56
編輯回答
陪她鬧

參考下我的這篇文章,看是否能幫助你哈,https://ypdai.github.io/2016/...

2018年5月7日 05:50
編輯回答
話(huà)寡

又找了一堆資料,自答了。

問(wèn)題原因

nginx沒(méi)有進(jìn)入該目錄的權(quán)限,故無(wú)法訪(fǎng)問(wèn)socket文件,permission denied

解決方法

1.改變socket文件位置

把socket文件放在ngnix可以訪(fǎng)問(wèn)到的地方,比如/tmp/mysite.sock
修改nginx相應(yīng)配置文件,然后運(yùn)行uwsgi

$ uwsgi --socket /tmp.mysite.sock --wsgi-file test.py

2.改變運(yùn)行nginx的用戶(hù)身份

沒(méi)有權(quán)限,我就給你權(quán)限
/etc/nginx/nginx.conf 第一行的user www-data; 中的www-data 改成權(quán)限足夠高的用戶(hù),重啟nginx

2017年3月25日 21:57