1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Linux中 Nginx+uwsgi部署flask项目 Nginx负载均衡 反向代理

Linux中 Nginx+uwsgi部署flask项目 Nginx负载均衡 反向代理

时间:2021-07-31 11:57:16

相关推荐

Linux中 Nginx+uwsgi部署flask项目 Nginx负载均衡  反向代理

Nginx是一款自由的、开源的、高性能HTTP服务器和反向代理服务器。

轻量级,同样起web服务,比 apache占用更少的内存及资源抗并发, nginx处理请求是异步非阻塞的,而 apache则是阻塞型的,在高并发下 nginx能保持低资源低消耗高性能;官方測试能够支撑5万并发连接,实际生产环境中能跑到2-3万并发连接配置文件非常简单,风格和程序一样進俗易懂提供负载均衡、反向代理,支持 rewrite,支持gzip压缩稳定性高,宕机概率微乎其微开源,可免费使用

安装Nginx

来源于

/taiyonghai/p/6728707.html

下载相关组件

[root@localhost src]# wget /download/nginx-1.10.2.tar.gz省略安装内容...[root@localhost src]# wget /source/openssl-fips-2.0.10.tar.gz省略安装内容...[root@localhost src]# wget /zlib-1.2.11.tar.gz省略安装内容...[root@localhost src]# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz省略安装内容...

安装Nginx及相关组件

openssl安装[root@localhost src]# tar zxvf openssl-fips-2.0.10.tar.gz省略安装内容...[root@localhost src]# cd openssl-fips-2.0.10[root@localhost openssl-fips-2.0.10]# ./config && make && make install省略安装内容...pcre安装[root@localhost src]# tar zxvf pcre-8.40.tar.gz省略安装内容...[root@localhost src]# cd pcre-8.40[root@localhost pcre-8.40]# ./configure && make && make install省略安装内容...zlib安装[root@localhost src]# tar zxvf zlib-1.2.11.tar.gz省略安装内容...[root@localhost src]# cd zlib-1.2.11[root@localhost zlib-1.2.11]# ./configure && make && make install省略安装内容...nginx安装[root@localhost src]# tar zxvf nginx-1.10.2.tar.gz省略安装内容...[root@localhost src]# cd nginx-1.10.2[root@localhost nginx-1.10.2]# ./configure && make && make install省略安装内容...

Nginx基本操作

启动[root@localhost ~]# /usr/local/nginx/sbin/nginx停止/重启[root@localhost ~]# /usr/local/nginx/sbin/nginx -s stop(quit、reload)命令帮助[root@localhost ~]# /usr/local/nginx/sbin/nginx -h验证配置文件[root@localhost ~]# /usr/local/nginx/sbin/nginx -t配置文件[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf启动nginx 使用`ps -ef | grep nginx`查看nginx进程是否启动启动成功 访问本地127.0.0.1 会出现Nginx的欢迎界面

uwsgi安装

通过pip安装

pip install uwsgi

uwsgi配置文件

在我们的项目目录中创建一个uwsgi.ini配置文件

我的配置文件如下

[uwsgi]uid=root #使用权限pid=rootsocket = 127.0.0.1:8008 #地址和端口号http=0.0.0.0:8000 #http监听harakiri = 300 #超时设置pidfile=/opt/CowRestAPI/uwsgi.pid #指定pid文件的位置,记录主进程的pid号vacuum=true #当服务器退出的时候自动清理环境,删除unix socket文件和pid文件limit-post= 67108864 #限制HTTP请求体的大小chair=/opt/CowRestAPI #项目的目录thunder-lock = true #序列化接受的内容master = true #主进程wsgi-file = /opt/CowRestAPI/api.py #载入wsgi-filecallable = app #callable指出的是具体执行.run方法的那个实体的名字,一般而言都是app=Flask(__name__)的,所以这里是appprocesses = 1 #进程数量threads = 4 #线程数量daemonize = /opt/CowRestAPI/uwsgiserver.log #使用进程在后台运行,并打印日志touch-reload = /opt/CowRestAPI/api.py #flask的启动文件stats = 0.0.0.0:8080 #指定的地址开启状态服务buffer-size = 32768#设置用于uwsgi包解析的内部缓存区大小。默认是4k

在不使用Nginx的情况下 需要配置http=0.0.0.0:8000 (本地)或者输入自己的公网IP加端口在自己的项目目录下 使用`uwsgi uwsgi.ini`启动项目然后访问自己的 ip + 端口 可以正常访问自己的项目

使用uwsgi+Nginx的情况下需要配置socket不能使用http

Nginx的配置文件

在自己下载的nginx文件中会有一个nginx.conf

我的nginx配置文件如下

部分也有注释说明可以参考

nginx.conf

user root; #使用指定用户#user nobody;worker_processes auto; #使用的worker进程数#error_log logs/error.log; #错误日志问价#error_log logs/error.log notice; #日志级别#error_log logs/error.log info;#pid logs/nginx.pid; #存放进程pidevents {worker_connections 1024; #每个worker最大连接数默认1024}http {include mime.types;default_type application/octet-stream;#log_format main '$remote_addr - $remote_user [$time_local] "$request" '# '$status $body_bytes_sent "$http_referer" '# '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;sendfile on;#tcp_nopushon;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;fastcgi_buffers 8 128k;send_timeout 60;server {listen 80;#监听的端口 可以添加多个 listen 81#listen 81;server_name 47.93.37.167; #自己的公网ip 本地直接localhost Nginx可以监听多个域名client_max_body_size 10m; #最大的报文,默认1mrewrite /baidu/(.*) ; #重定向 访问/baidu/...就会跳转指定的url页面location / {include uwsgi_params; #说明与uwsgi进行连接uwsgi_param UWSGI_CHDIR /opt/CowRestAPI; #项目目录uwsgi_param UWSGI_SCRIPT api:app; #api为flask项目启动文件,app是run方法的那个实体的名字,一般而言都是app=Flask(__name__)的uwsgi_pass 127.0.0.1:8008; #此处的ip和端口需要和uwsgi配置文件中的socket一样,才能建立连接}location - /\secret\/(.*)$ {return 403; #访问secret 返回403 隐藏} }}

如果访问出现nginx 504 Gateway Time-out的错误

一般看来, 这种情况可能是由于nginx默认的fastcgi进程响应的缓冲区太小造成的, 这将导致fastcgi进程被挂起, 如果你的fastcgi服务对这个挂起处理的不好, 那么最后就极有可能导致504 Gateway Time-out

现在的网站, 尤其某些论坛有大量的回复和很多内容的, 一个页面甚至有几百K

默认的fastcgi进程响应的缓冲区是8K, 我们可以设置大点

在nginx.conf里, 加入:

fastcgi_buffers 8 128k

这表示设置fastcgi缓冲区为8×128k

当然如果您在进行某一项即时的操作, 可能需要nginx的超时参数调大点, 例如设置成60秒:

send_timeout 60;

我只是调整了这两个参数, 结果就是没有再显示那个超时, 可以说效果不错

如果还有此类问题可以参考以下链接

/xiamidong/p/4105583.html

nginx的location配置详解

语法规则: location [=|~|~*|^~] /uri/ { … }= 开头表示精确匹配^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。~ 开头表示区分大小写的正则匹配~* 开头表示不区分大小写的正则匹配!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则/ 通用匹配,任何请求都会匹配到。多个location配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

/sign-ptk/p/6723048.html

反向代理

http {include mime.types;default_type application/octet-stream;#access_log logs/access.log main;sendfile on;#tcp_nopushon;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;fastcgi_buffers 8 128k;send_timeout 60;server {listen 80;#监听的端口 可以添加多个 listen 81#listen 81;server_name localhost; location / {proxy_pass http://192.168.1.101:9000; #反向代理#以下是一些反向代理的配置可删除proxy_redirect off; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IPproxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; #允许客户端请求的最大单文件字节数client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数proxy_connect_timeout300; #nginx跟后端服务器连接超时时间(代理连接超时)proxy_send_timeout 300; #后端服务器数据回传时间(代理发送超时)proxy_read_timeout 300; #连接成功后,后端服务器响应时间(代理接收超时)proxy_buffer_size4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传}}}

Nginx负载均衡 反向代理

Nginx.conf 其中的设置

http {include mime.types;default_type application/octet-stream;#access_log logs/access.log main;sendfile on;#tcp_nopushon;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;fastcgi_buffers 8 128k;send_timeout 60;upstream nginx_test {#ip_hash#只访问到了一台 保持session的一致性 server 192.168.1.101:9000 weight=1 max_fails=5 fail_timeout=20s;#设置健康检查和超时时间 加上down 暂时不参与负载server 192.168.1.102:9000 weight=3; #两台服务ip weight代表比重 越大访问次数越多}server {listen 80;#监听的端口 可以添加多个 listen 81#listen 81;server_name localhost; rewrite /baidu/(.*) ; #重定向 访问/baidu/...就会跳转指定的url页面location / {proxy_pass http://nginx_test;}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。