gunicorn和nginx端口映射

web环境部署

gunicorn安装

pip install gunicorn

gunicorn启动项目

gunicorn module_name:variable_name

例:gunicorn run:app

例:gunicorn -b 0.0.0.0:8000 run:app

可以通过这个ip访问到服务器

nginx把本地80端口转到其他端口

安装nginx

sudo apt-get install nginx

配置转发

nginx的默认安装路径在/usr/local/nginx下.

nginx的默认配置在/etc/nginx下.(nginx.conf在这个下面)

把80端口指向8080端口

修改nginx.conf#该文件在/etc/nginx(增加一个映射端口)

  • 注释掉改行:

    #nginx.conf 中 http 段最后会有以下这两句.
    #这样你就可以把已经配置好的各种 server conf 放在 sites-available 里,
    #如果想启用的时候只要复制或者软连接到上面两个文件夹里,想关掉或者更改配置的时候也比较方便.
    #
    #而默认情况下sites-enabled目录下会放一个sites-available/default的软链接,
    #在sites-available/default已经对localhost进行设置, 
    #导致无论你怎么修改nginx.conf对本地端口进行配置都不会生效. 一直报404错误.
    #所以此处要把sites-enabled注掉. 或者把该软链接换掉.
    #
    include /etc/nginx/conf.d/*.conf;
    #include /etc/nginx/sites-enabled/*; 
  • 在http配置项中增加如下内容:

    server {
        listen 80;
        server_name localhost;

        location / {
            proxy_pass http://localhost:8080;
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
  • 重启nginx


    sudo service nginx restart //或者 sudo nginx -s reload1
  • 然后就可以直接通过localhost/index.htm来访问8080端口的项目了.

:上面的两个localhost要改

我的第一个是127.0.0.1(实际的地址)

第二个是0.0.0.0:8000(代理的地址)(代理的地址会映射到实际的地址)

然后用gunicorn -b 0.0.0.0:8000打开项目

这样从浏览器上访问项目就不用端口号了

总结

最后,总结下这几个部分的关系:

(nginx收到客户端发来的请求,根据nginx中配置的路由,将其转发给WSGI)nginx:”WSGI,找你的来了!”(WSGI服务器根据WSGI协议解析请求,配置好环境变量,调用start_response方法呼叫flask框架)WSGI服务器:”flask,快来接客,客户资料我都给你准备好了!”(flask根据env环境变量,请求参数和路径找到对应处理函数,生成html)flask:”!@#$%^……WSGI,html文档弄好了,拿去吧。”(WSGI拿到html,再组装根据env变量组装成一个http响应,发送给nginx)WSGI服务器:”nginx,刚才谁找我来着?回他个话,!@#$%^…..”(nginx再将响应发送给客户端)

问题

nginx映射?具体那个实在服务器哪个是在客户端?。。。。。具体流程


端口映射就是将主机的IP地址的一个端口映射到局域网中一台机器,当用户访问这个IP的这个端口时,服务器自动将请求映射到对应局域网分机 (就这么简单)

当我用gunicorn打开一个项目时,哪里的用户可以访问(局域网里的用户可以访问)

你可能感兴趣的:(web_learning)