nginx基础

nginx可作为HTTP服务器、反向代理服务器、邮件服务器。可用来实现反向代理、负载均衡。

正向代理与反向代理区分:

正向代理:访问gg,这就是正向代理,代理了客户端。

反向代理:某个服务有3台服务器,对这3台服务器做一个统一的管理,就是反向代理,代理了服务端。以代理服务器来接收请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端

Socket:计算机之间进行通信的一种约定或一种方式,利用三元组【ip地址,协议,端口】进行网络间通信。Socket通信的数据传输方式,常用的有两种:
  a、SOCK_STREAM:表示面向连接的数据传输方式。数据可以准确无误地到达另一台计算机,如果损坏或丢失,可以重新发送,但效率相对较慢。常见的 http 协议就使用 SOCK_STREAM 传输数据,因为要确保数据的正确性,否则网页不能正常解析。
  b、SOCK_DGRAM:表示无连接的数据传输方式。计算机只管传输数据,不作数据校验,如果数据在传输中损坏,或者没有到达另一台计算机,是没有办法补救的。也就是说,数据错了就错了,无法重传。因为 SOCK_DGRAM 所做的校验工作少,所以效率比 SOCK_STREAM 高。

    我用到的nginx是作为反向代理,监听容器内部端口。整体流程为:

客户端—>服务端端口—>Docker映射内部端口—>nginx监听—>将请求传递给uwsgi服务—>flask框架下的server处理任务

1、docker 实现容器内外端口映射,起容器时配置端口

docker XXX 外部端口:内部端口  XXX

2、nginx 监听本地端口

用一个*.conf文件来实现监听,并把服务传递uwsgi,启动服务时需要在容器内将nginx启动。启动方式为运行 nginx即可。

*.conf文件示例:

  1. server {  
  2.         listen       80;   #监听容器内80端口
  3.         server_name  app1.mydomain.com;  #配置域名,不重要,可以写成localhost
  4.          error_log /home/workspace/error.log   # 服务错误日志
  5.          access_log /home/workspace/access.log   # 接收请求日志
  6.         location / {    # 接收请求,可用正则过滤 
  7.                 include uwsgi_params;  
  8.                 uwsgi_pass 127.0.0.1:9090;  #把所有nginx接收到的请求传给本地9090uwsgi协议处理
  9.                 uwsgi_param UWSGI_PYHOME /var/www/myenv;  
  10.                 uwsgi_param UWSGI_SCRIPT myapp1;   #也可以是参数serverapprun:app等,似乎指服务类型                  
  11.                 uwsgi_param UWSGI_CHDIR /var/www/myappdir1;  #项目根目录
  12.         }  
  13.     }  

3、uwsgi服务

uwsgi将nginx监听到的任务交给Flask框架处理。

区分以下3个概念:

WSGI,全称 Web Server Gateway Interface, Gateway就是网关, Web 服务器(server)和 Web 应用程序或框架(app、Flask)之间的一种简单而通用的接口,是一种通信的规范(通信协议),作用是在协议之间进行转换。

uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。

uwsgi是一个uWSGI服务器自有的协议。

将uwsgi启动命令转化为一个ini配置文件,启动时运行uwsgi uwsgi.ini

常用参数:

[uwsgi]
socket = 127.0.0.1:3031   # 通信ip、port配置,需要和nginx的.conf文件中的uwsgi_pass 保持一致
chdir = /home/foobar/myproject/.   #指定项目的目录
wsgi-file = myproject/server.py   # 服务文件路径
processes = 4   # 进程数
threads = 2   # 线程数

4、flask框架服务

常用命令

from flask import Flask


app=Flask(__name__)  #引入了Flask包,并创建了一个web应用的实例“app”,__name__是系统变量,实例名称就是这个python的文件名

@app.route('/') # 用了装饰器,指明了路由规则
def hello_world():
    return __name__

app.run()   # 程序实例用run方法启动flask集成的开发web服务器

app.run(host='0.0.0.0',port=8888,debug=True)  #为支持远端访问,设置host参数及端口号。debug是设置了调试模式


@app.before_first_request   #在接收请求前执行一次,比如模型的初始化等,只会被执行一次 
def fun():
    print('hi')

参考网站:

8分钟带你深入浅出搞懂Nginx - 知乎

Nginx 配置详解 | 菜鸟教程

https://www.cnblogs.com/jingmoxukong/p/5945200.ht

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值