本博客主要讲解 玩转nginx代理服务器,参考了django官方部署教程,以及flask部署教程,以及tomcat部署教程,nginx代理服务器
重点在于如何在同一个服务器上运行多种语言后端。
重启服务器命令
切记 打开服务器端口
切记 以 root 身份 启用 nginx 转发服务
killall -9 uwsgi uwsgi -x /data/wwwroot/Logistics/Logistics.xml nohup uwsgi /data/wwwroot/yiliao1/uwsgi.ini & /usr/local/nginx/sbin/nginx -s reload
先记下来命令,方便自己使用
下边来一句一句分析
killall -9 uwsgi
暂停所有 uwsgi 服务
刷新 django项目资源``
uwsgi -x /data/wwwroot/Logistics/Logistics.xml
刷新 flask 项目资源
nohup uwsgi /data/wwwroot/yiliao1/uwsgi.ini &
重启 nginx 代理服务器
/usr/local/nginx/sbin/nginx -s reload
本博客主要讲解 玩转nginx代理服务器,参考了django官方部署教程,以及flask部署教程,以及tomcat部署教程,nginx代理服务器
重点在于如何在同一个服务器上运行多种语言后端。
下边我们简单开讲,tomcat 部署较为简单,此处不详谈,来点干货
nginx转发tomcat代理配置文件(配置文件参考博主位置)
user root; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; #服务1 server { listen 80; server_name www.limengkai.work limengkai.work; rewrite ^(.*)$ https://${server_name}$1 permanent; } #服务2 server { listen 443 ssl http2; server_name www.limengkai.work limengkai.work; root /data/wwwroot/Logistics; #项目路径 charset utf-8; ssl_certificate /data/wwwroot/Logistics/1701030_www.limengkai.work.pem;#.pem证书路径 ssl_certificate_key /data/wwwroot/Logistics/1701030_www.limengkai.work.key;#.key证书路径 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; error_page 497 https://$host$request_uri; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8999; uwsgi_param UWSGI_SCRIPT Logistics.wsgi; uwsgi_param UWSGI_CHDIR /data/wwwroot/Logistics/;#项目路径 } location /static/ { alias /data/wwwroot/Logistics/static/; #静态资源路径 } access_log /data/wwwroot/Logistics/www.limengkai.work.log; error_log /data/wwwroot/Logistics/www.limengkai.work.error.log; } #服务3 server { listen 1443 ssl http2; server_name www.limengkai.work limengkai.work; charset utf-8; ssl_certificate /data/wwwroot/yiliao1/1701030_www.limengkai.work.pem;#.pem证书路径 ssl_certificate_key /data/wwwroot/yiliao1/1701030_www.limengkai.work.key;#.key证书路径 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; error_page 497 https://$host$request_uri; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:5000; # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi 处理 } access_log /data/wwwroot/yiliao1/www.limengkai.work.log; error_log /data/wwwroot/yiliao1/www.limengkai.work.error.log; } #服务4 server { listen 1401; # 端口号 server_name www.limengkai.work limengkai.work; # 配置域名信息 root /home/tomcat/apache-tomcat-9.0.21/webapps/web2_war/mk_learn/; # 静态页面根目录 index index.html; } #服务5 server { listen 1402; # 端口号 server_name www.limengkai.work limengkai.work; # 配置域名信息 root /home/tomcat/apache-tomcat-9.0.21/webapps/web2_war/mk_learn/as2/; # 静态页面根目录 index index.html; } }
以上nginx配置文件一共 配置了 五个服务,其中服务4,5最简单,是静态html代理
服务1为 tomcat 请求转发
监听80端口转发tomcat
#服务1 server { listen 80; server_name www.limengkai.work limengkai.work; rewrite ^(.*)$ https://${server_name}$1 permanent; }
服务2,服务3 配置较为困难,具体步骤请先详细阅读,django部署服务,以及flask部署服务,下边依次讲解主要步骤:
服务2搭建 django服务,首先需要创建 django的虚拟环境
django部署详细过程
然后启动虚拟环境后,开始配置nginx文件
本文配置了 https 443 协议
nginx文件配置如下,
此配置文件listen 443 ssl http2 转发 uwsgi 127.0.0.1:8999 内部端口
uwsgi 是一种网络协议,此处可以简单理解为 添加了一层网络层映射
将 服务器 https://limengkai.xxxx ➡️ uwsgi 127.0.0.1:8999 端口
所以在下边的配置过程中,需要在 uwsgi中 配置 内部服务
#服务2 server { listen 443 ssl http2; server_name www.limengkai.work limengkai.work; root /data/wwwroot/Logistics; #项目路径 charset utf-8; ssl_certificate /data/wwwroot/Logistics/1701030_www.limengkai.work.pem;#.pem证书路径 ssl_certificate_key /data/wwwroot/Logistics/1701030_www.limengkai.work.key;#.key证书路径 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; error_page 497 https://$host$request_uri; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8999; uwsgi_param UWSGI_SCRIPT Logistics.wsgi; uwsgi_param UWSGI_CHDIR /data/wwwroot/Logistics/;#项目路径 } location /static/ { alias /data/wwwroot/Logistics/static/; #静态资源路径 } access_log /data/wwwroot/Logistics/www.limengkai.work.log; error_log /data/wwwroot/Logistics/www.limengkai.work.error.log; }
uwsgi服务配置
创建文件夹 上传django 项目文件,自己随意创建即可,一般的创建习惯是
和虚拟环境目录放在一起,其实没有什么影响,方便寻找
博主项目名称Logi
项目位置 /data/wwwroot/Logi
虚拟环境位置 /data/env/pyweb/bin
博主文件版本
centos 7.0.3
nginx version: nginx/1.13.7
tomcat version 9.0.21
python3.6.5
django2.2.4
好了以上都是闲话,按照此版本配置基本问题不大,
在项目位置 /data/wwwroot/Logi 下新建 同名 [项目名称].xml文件
如果有 https 证书也放进去 .pom .key文件
<!-- logi.xml --> <uwsgi> <socket>127.0.0.1:8999</socket> <!-- 内部端口,自定义 --> <chdir>/data/wwwroot/Logistics/</chdir> <!-- 项目路径 --> <module>Logistics.wsgi</module> <!-- Logistics为wsgi.py所在目录名--> <processes>4</processes> <!-- 进程数 --> <daemonize>uwsgi.log</daemonize> <!-- 日志文件 --> </uwsgi>
此时 django项目配置工作已经完成,
运行 uwsgi -x /data/wwwroot/Logistics/Logistics.xml 即可
虽然flask与 django 同为 python 项目,但是两者配置却又差别,博主水平有限,暂时没有找到,一致的方法,
但是我们可以来看一看他们的差别,观察 django项目可以发现,在django
项目同名文件下的 logi/logi存在 logi/logi/uwsgi.py 文件,
此文件可以调用启动 uwsgi 服务 配置 xml 文件,所以在django项目中,只编写 xml文件即可,执行 uwsgi -x 命令即可
但是在flask项目中,启动服务只有app.py 文件
所以在 nginx 服务3配置完成后 需要新建 uwsgi.ini 文件
同 服务2 此处 配置nginx 监听
https://limengkai.xxx:1443 端口 转发 uwsgi 内部端口
uwsgi_pass 127.0.0.1:5000; 也是 flask 默认启动端口
#服务3 server { listen 1443 ssl http2; server_name www.limengkai.work limengkai.work; charset utf-8; ssl_certificate /data/wwwroot/yiliao1/1701030_www.limengkai.work.pem;#.pem证书路径 ssl_certificate_key /data/wwwroot/yiliao1/1701030_www.limengkai.work.key;#.key证书路径 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; error_page 497 https://$host$request_uri; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:5000; # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi 处理 } access_log /data/wwwroot/yiliao1/www.limengkai.work.log; error_log /data/wwwroot/yiliao1/www.limengkai.work.error.log; }
配置nginx flask 转发文件后,
在flask 项目文件下 创建 uwsgi.ini文件
博主flask项目文件/data/wwwroot/yiliao1
/data/wwwroot/yiliao1/app.py
/data/wwwroot/yiliao1/uwsgi.ini
因为 博主 django项目以及 flask 项目使用的相同的 python虚拟环境,此处省略,
#uwsgi.ini文件配置 [uwsgi] #指向网站根目录 chdir=/data/wwwroot/yiliao1 #虚拟环境目录 home = /data/env/pyweb # python启动程序文件 wsgi-file=app.py #python程序内用于启动的application变量名 callable=app processes = 4 threads = 2 # py文件修改,自动加载 py-autoreload=1 #设置uwsgi包解析的内部缓存区大小。默认4k buffer-size = 32768 chmod-socket = 664 # 退出uwsgi是否清理中间文件,包含pid、sock和status文件 vacuum=true # uwsgi 启动时所使用的地址与端口,配置nginx时候使用 socket = 127.0.0.1:5000 #没有nginx时,要用浏览器测试是否可以成功访问需要配置http端口 http=:9090 # 状态监测地址 stats=127.0.0.1:9191 #使用协程gevent启动使用 listen=100
配置完成后,在激活虚拟环境后 来到 flask项目文件
执行 nohup uwsgi /data/wwwroot/yiliao1/uwsgi.ini & 即可刷新服务
在完成所有配置后,即可通过 下边四条命令随时启动 django 以及 flask 服务,如果有多个 django项目,以及多个flask 项目,按照相同 步骤 重复以上环节即可,
切记 打开服务器端口
切记 以 root 身份 启用 nginx 转发服务
杂记命令:
可以用命令杀掉这个端口在重启:
sudo fuser -k 8080/tcp
killall -9 uwsgi uwsgi -x /data/wwwroot/Logistics/Logistics.xml nohup uwsgi /data/wwwroot/yiliao1/uwsgi.ini & /usr/local/nginx/sbin/nginx -s reload