首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
拉钩
V2EX  ›  Python

nginx,127.0.0.1 可以访问,但是 127.0.0.1:8000 就被拒绝访问,为什么?

  •  
  •   sevenQu · 277 天前 · 5326 次点击
    这是一个创建于 277 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想部署在本地,系统是 Ubuntu16.04 ,所以 server_name 是 127.0.0.1

    网页提示

    Try:
    Checking the connection
    Checking the proxy and the firewall
    
    这是我的 ngnix 的配置文件  
    

    server {
    listen 80;
    server_name 127.0.0.1;

        root /home/www/blog;
        access_log /home/www/blog/logs/access.log;
        error_log /home/www/blog/logs/access.log;
    
        location / {  
            proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;  
            proxy_set_header Host $http_host;  
            proxy_redirect off;  
            if (!-f $request_filename) {  
                proxy_pass http://127.0.0.1:8000;  
                break;  
            }  
        }  
    }
    
    第 1 条附言  ·  277 天前
    我也不知道是怎么改的,目前是这个
    502 Bad Gateway
    第 2 条附言  ·  276 天前
    各位大佬,目前我使用 gunicorn 和 ngnix 已经可以启动了,很感谢各位。

    我想使用 supervision 启动 gunicorn
    supervision 的配置文件如下,我使用的 pyenv,所以 gunicorn 的路径有点长
    [program:niceblog]
    command=/home/seven/.pyenv/versions/daily/bin/gunicorn run:app -c /home/seven/Desktop/niceblog/gunicorn.conf
    diretory=/home/seven/Desktop/niceblog
    user=root
    autostart=true
    autorestart=true
    tdout_logfile=/home/seven/Desktop/niceblog/logs/gunicorn_supervisor.log

    命令行提示:BACKOFF Exited too quickly

    查询 logs 提示:Failed to find application: 'run'

    感觉我的 run 文件应该没问题,因为我使用 gunicorn 命令行启动的时候就是使用的 run:app
    启动的时候我还专门进入虚拟环境和项目目录,都不行

    希望可以有人指点一下,谢谢
    第 3 条附言  ·  274 天前

    承蒙各位照顾,我的问题终于解决了,很多人评论,这是我的最后总结,如果有错误欢迎指出,希望可以帮到其他人
    部署flask-gunicorn-nginx-supervisor

    39 回复  |  直到 2018-03-15 10:24:46 +08:00
        1
    xuuuu   277 天前
    试一下 127.0.0.1:80 就知道了
        2
    sevenQu   277 天前
    @xuuuu 是 Welcome to nginx!的页面
        3
    MonoLogueChi   277 天前 via Android
    你这个配置应该是代理 8000 端口吧,你在 8000 端口是上开了什么服务这应该不关 Nginx 的事吧
        4
    xuuuu   277 天前
    @sevenQu 观察地址栏变化撒...
        5
    Molita   277 天前 via Android
    你确认下你 8000 端口的服务起了没
        6
    sevenQu   277 天前
    @Molita 没有,我用的 flask,gunicorn,不知道该怎么办
        7
    wisej   277 天前
    @sevenQu gunicorn -b 127.0.0.1:8000
        8
    sevenQu   277 天前
    @wisej
    我的启动文件名字是 manage,里面是使用了 flask_script 的 manager.run()启动,不是 app.run ,不知道这个有没有影响

    我用的 gunicorn 配置文件,方便的话,帮我看看有什么不对的
    [program:blog]

    command=/home/blog/env/bin/gunicorn manage:manager -c /home/blog/gunicorn.conf

    directory=/home/blog
    user=www
    autostart=true
    autorestart=true
    stdout_logfile=/home/blog/logs/gunicorn_supervisor.log
    environment = MODE="PRODUCTION"
        9
    a1581076543   277 天前
    查看端口开启状态和文件夹访问权限
        10
    pkookp8   277 天前 via Android
    不懂 nginx,大概把 listen 的改为 8000,重新运行一下就行了
        11
    sevenQu   277 天前
    @pkookp8 我试试,我也很纳闷,为什么都是用的 8000,而那里 listen 的是 80
        12
    ybping   277 天前 via iPhone
    这个 nginx 也没看到配置 8000 端口,直接访问肯定拒绝了吧
        13
    Eleutherios   277 天前 via iPhone
    回报 “ sudo netstat -ntpl ” 的输出结果
        14
    sevenQu   277 天前
    @Eleutherios
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
    tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1895/mysqld
    tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1574/nginx -g daemo
    tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN 1429/dnsmasq
    tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 5102/cupsd
    tcp6 0 0 :::80 :::* LISTEN 1574/nginx -g daemo
    tcp6 0 0 ::1:631 :::* LISTEN 5102/cupsd
    这个查询厉害,真没有 8000
        15
    580a388da131   277 天前
    Flask 默认端口是 5000 啊
    你有改成 8000 吗
        16
    sevenQu   277 天前
    @580a388da131
    server = Server(host="127.0.0.1", port=8000)
    manager.add_command("runserver", server)
    这样修改了,试了一下还是不行,是不是不能使用 manageer.run?
        17
    sevenQu   277 天前
    @ybping 什么意思?在哪里修改?
        18
    aricxu   277 天前
    你这个配置的意思是开放 80 端口访问,对不存在的文件转发到 8000 端口。也就是在 nginx 后面需要有一个服务在跑,监听端口是 8000。
        19
    ybping   277 天前 via iPhone
    @sevenQu listen 8000 ;然后重启 nginx
        20
    sevenQu   277 天前
    @aricxu 启动 supervision 的时候,提示
    niceblog: ERROR (spawn error)
        21
    sevenQu   277 天前
    @ybping 试了一下,不是提示无法访问,而是 502 bad gateway,感觉 @aricxu 说的挺对的,我目前是 supervision 启动不了
        22
    xiayun   277 天前
    你本地后端有 8000 端口的服务存在吗?
        23
    Mojy   277 天前
    nginx 好像是要与 uwsgi 配合搞吧?你 uwsgi 配置了吗?
        24
    litter123   277 天前
    netstat -an | grep 8000

    截个图看看
        25
    msg7086   277 天前   ♥ 2
    这楼感觉乱得一批啊,特别是那位不懂的大佬,不懂就别来添乱了好不好求你们了。

    =====

    首先这里有俩程序,一个叫 nginx,一个叫 gunicorn。

    nginx
    它的作用是向外提供服务,是面向用户的窗口,所以 listen 需要写 80,root 需要写网站的静态文件目录地址,proxy_pass 需要写后端的监听地址。

    gunicorn
    它的作用是起来你的程序,是面向代码的窗口,对外与 nginx 相连接,所以 listen 写 8000,和上方 proxy_pass 的地址对应。

    =====

    首先,你访问的地址应该是 127.0.0.1,而不是 8000 端口。
    然后,两个程序要同时运行,才能访问到网站。
    至于出现 welcome to nginx,可能是(1)你修改完配置没重载,(2)你写的这段配置没有被执行,(3)你写了其他虚拟主机配置,导致访问时访问了另一个虚拟主机,(4)预装的静态页面你没有删除。

    自己好好查一下吧。

    最后贴两个链接:
    http://gunicorn.org/#quickstart
    http://gunicorn.org/#deployment
        26
    geek123   277 天前
    端口没被占了?
        27
    sevenQu   277 天前
    @msg7086 老哥,通透,我去学习一下,十分感谢,说实话
        28
    sevenQu   276 天前
    @msg7086
    使用 supervisorctl reread 如果不加 sudo 的话提示是这个,我使用的是 pyenv 创建的 3.6.4,我感觉这个出问题了,修改权限可以 reread,但是那个 python2.7 感觉不对,是不是应该改一下,怎么改?

    [Errno 13] Permission denied: file: /usr/lib/python2.7/socket.py line: 228
        29
    lastpass   276 天前 via Android
    日志日志 先看日志。
        30
    meowoo   276 天前 via iPhone
    首先 8000 端口的服务没起来

    然后你 nginx 里配置的难道不是文件不存在才转发到 8000 上? 所以访问存在的最多就是 welcome 了吧 根本没转发
        31
    raphaelsoul   276 天前
    0.0.0.0:8000 和 127.0.0.1:8000 什么区别?你搞清楚就知道为什么了
        32
    wisej   276 天前
    @sevenQu 没有关系,只要你指定的是你所想要启动的 Flask 实例就行。你这里没有指定绑定的地址,就像我说的,你可以尝试加 -b 127.0.0.1:8000,这样才会监听到 8000 端口
        33
    xiaofengchen   276 天前   ♥ 1
    1、首页是 Welcome to nginx 可以看看 /etc/nginx/sites-enabled/路径下是不是只有 default,如果你单独写了配置文件,那么删掉 default,首页就不是“ Welcome to nginx ”了;
    2、检查防火墙有没有允许 8000 端口(不过就算没允许,你 nginx 反向代理后,访问 127.0.0.1:80 应该是能运行的,允许后访问 127.0.0.1:8000 和 80 端口的结果一样,如果有问题那么就先不要管 nginx 这一层,在 gunicorn 和程序上找原因);
    3、如果上面没解决 运行 gunicorn wsgi -c bind = '0.0.0.0:2000' pid = '/tmp/manager.pid' 现在就相当于在运行你的程序,再有问题就是你程序 bug,第三步的前提是你程序配置了 wsgi.py ,这个很简单,百度一下就有。

    希望能帮到你~
        34
    xiaofengchen   276 天前
    @xiaofengchen 第三步的 gunicorn wsgi -c bind = '0.0.0.0:2000' pid = '/tmp/manager.pid' 端口 8000 是这样的
    gunicorn wsgi -c bind = '0.0.0.0:8000' pid = '/tmp/manager.pid' 具体细节可百度,大概是这个思路,不过我一般是三二一,每一步没问题了才下一步。。
        35
    thulof   276 天前
    这句改一下,server = Server(host="0.0.0.0", port=8000) ,试试
        36
    ipwx   276 天前
    话说,@sevenQu 你虽然用了 gunicorn 但是你 nginx 没用 wsgi 协议诶,nginx 配置的是假设 8000 为 http 协议。

    https://docs.nginx.com/nginx/admin-guide/web-server/app-gateway-uwsgi-django/
        37
    sevenQu   276 天前
    @xiaofengchen
    很开心,按照你的 321 的步骤走,gunicorn 使用命令行启动成功了,ngnix 也可以了,网站成功走起
    但是 gunicorn 命令行启动后,那个命令窗口好像不能继续使用了

    我之前看的教程是使用 supervision 通过 gunicorn 配置文件启动的,不知道为什么用配置文件启动不了,我很纳闷,这是 supervision 的配置文件

    [program:niceblog]
    command=/home/seven/.pyenv/versions/daily/bin/gunicorn run:app -c /home/seven/Desktop/niceblog/gunicorn.conf
    diretory=/home/seven/Desktop/niceblog
    user=root
    autostart=true
    autorestart=true
    tdout_logfile=/home/seven/Desktop/niceblog/logs/gunicorn_supervisor.log


    gunicorn 的配置文件很简单
    workers=3
    bind='127.0.0.1:8000'

    感觉关键是 supervision 的 command 那一行
    /home/seven/.pyenv/versions/daily/bin/gunicorn 这是我用 pyenv 搭建的 flask 环境,gunicorn 所在位置

    求解,谢谢
        38
    lightening   276 天前
    @sevenQu 你要从非本机访问的话,gunicorn 要 bind 0.0.0.0:8000 吧。127.0.0.1 只能从服务器本机访问。
        39
    POPOEVER   275 天前
    前两天正好在写在 CentOS 上跑 Node/Express 应用的一个快速指南,本来想可能大家都知道就不写了,看来我们都是从小白白赤手空拳过来的,还是有这类需求的是吧,哈哈
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2210 人在线   最高记录 4019   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 19ms · UTC 10:03 · PVG 18:03 · LAX 02:03 · JFK 05:03
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1