nginx【第3.75期】实战结果展示 - Go语言中文社区

nginx【第3.75期】实战结果展示


前情回顾

【第3.5期】访问公网ip+端口+路径
上一节主要讲的是http协议,这一节补充一点https的东西,然后直接上实战

本节目标

本节是关于nginx科普的最后一篇,将完成访问域名+端口+路径功能(HTTPS
——即终极任务
(我是笨? ^ ^l|

终极任务

【flask+宝塔】我在云服务器上,想做一个https协议的“https://域名:端口号”这样的网站,最好是在宝塔面板上设置

开始前的最后准备

https证书

作用

直接搬运百度

HTTPS证书是一种数字证书,类似于驾照、护照和营业执照的电子副本。这种证书通常是在网站服务器中配置的,因此也称为服务器证书。
HTTPS的作用:确保了网站的真实性,防止流量劫持;有利于网站的SEO,提升网站的排名;预防黑客篡改内容;提升公司的品牌形象和可信度
总而言之,HTTPS证书是一种安全性很高的证书。该证书可以在一定程度上保护网站的信息安全,防止信息被非法分子盗用。
什么是HTTPS证书?HTTPS证书含义及优势

获取方法

各大平台都可以免费获取SSL证书,以下是华为云
在这里插入图片描述
在这里插入图片描述

  • 点击下载,下载证书到本地,根据不同框架,证书也有不同的版本(应该也可以后面自行转化),记得下载对应版本

  • 一般下载证书后面都会跟一个教程,结合【第3.5期】和教程,其实理解起来应该很快
    在这里插入图片描述

实战环节

这一部分我将从头开始搭一遍网站(之前的文件命名太乱,也记不得了

uwsgi+python(访问公网ip+端口)

这一部分是3.5期的知识,详情请看上期,记得配置好安全组

1. 配置环境

见上期
测试效果:

python3 test1.py

可以正常运行即可
在这里插入图片描述

2. 命令行输入

uwsgi --http :6111 --wsgi-file uwsgi_py.py

“another instance … the same address” 端口被占用

如果出现如此处倒数第二行的问题,说明该端口已经被占用,需要把这个进程kill掉
在这里插入图片描述调试方法 见此处

运行结果

若出现在这里插入图片描述
说明运行顺利~
浏览器访问公网ip:6111
在这里插入图片描述
说明成功访问???

uwsgi+flask+python(访问公网ip+端口+路径)

1. 配置环境

通过virtualenv配置环境

2. 新建uwsgi.ini与.py文件及配置中其他文件

⚠️注意:

当你没用nginx,调试项目的时候,使用http形式
http = 公网ip:8000
基于socket链接运行时,只有与nginx结合的时候,才使用socket形式
socket = 公网ip:8000


代码详情见上期,这个项目里命名为uwsgi_flask_py.py
uwsgi修改后配置如下
在这里插入图片描述

3. 初始化uwsgi.ini

uwsgi --ini uwsgi.ini

效果如下图:
在这里插入图片描述

若修改了配置,可以使用uwsgi --reload uwsgi/uwsgi.pid重启

运行结果(马赛克内是公网ip)

在这里插入图片描述
在这里插入图片描述


nginx+uwsgi+flask(重定向访问公网ip+端口+路径)

1. 配置环境

通过virtualenv配置环境

2.复制上一part中py文件

为了省事,这里就啥都没改了

cp uwsgi_flask_py.py nginx_uwsgi_flask.py

3.配置文件nginx.conf

见上一期的配置:修改一处,添加两处,复制两个文件
附修改后,完整的nginx.conf


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  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_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        # listen       80;
        listen       6112;
        # server_name  localhost;
        server_name 139.159.204.67;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        location /helloWorld {  # 此处的"/XXX"必须要和.py里一致!
            include uwsgi_params;
            # proxy_pass http://0.0.0.0:6111;  # 用不了,An error occurred
            # proxy_pass http://【公网IP】:6111;  # 用不了,An error occurred
            uwsgi_pass 0.0.0.0:6111;  # 可以使用,记得配置uwsgi.ini两处改动
            # uwsgi_pass 【公网IP】:6111;  # 可以使用,记得配置uwsgi.ini两处改动
            # uwsgi_pass unix:/root/hitsz/uwsgi_useless/uwsgi/uwsgi.sock;
            # 测试了一下,下面三行注释掉好像也能跑,但是最好加上
            uwsgi_param UWSGI_PYHOME /root/hitsz/csdnV3/venv;  # 虚拟环境所在文件夹
            uwsgi_param UWSGI_CHDIR /root/hitsz/csdnV3;  # 主文件夹
            uwsgi_param UWSGI_SCRIPT nginx_uwsgi_flask:app;  # 左:.py的名字 右:.py里Flask的对象
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

思考:这时候会被重定向到6112还是6111端口?

回答:只有6112! 这才是重定向嘛~

4.uwsgi.ini的修改

cp uwsgi.ini nginx_uwsgi.ini

socket处的端口需要和nginx.conf中相对应

(修改3处;注释掉http,注释掉socket,重新添加socket)
在这里插入图片描述

5.启动uwsgi和nginx

在启动前,请确保杀死全部nginx/uwsgi进程(方法见下文)
在这里插入图片描述
命令大全

nginx -c XXX.conf
启动:以自定义的conf启动nginx文件

nginx -s reload
重启:重启nginx

nginx -s stop
停止:停止nginx

1.启动uwsgi

uwsgi --ini 【自定义.ini文件】

若已经开启uwsgi需要重启,可 kill 进程

2.启动nginx

nginx -c 【自定义.conf文件】

若已经开启nginx需要重启,可改用

nginx -c 【自定义.conf文件】 -s reload

或者 kill 进程

运行结果

输入公网ip:linsten处端口号以及公网ip:listen处端口号/路径,检验效果
在这里插入图片描述
(有一部分被nginx主页面覆盖了)在这里插入图片描述

可能出现的问题

  • nginx启动报错
    如图:(解决方法也如图
    在这里插入图片描述
  • 没打开uWSGI就开了nginx
    报错截图
    在这里插入图片描述

思考:这时候按照上一个part的方法(6111)端口还能访问到吗?

回答:不能
在这里插入图片描述

nginx+uwsgi+flask(域名+端口+路径)

  • 类似上一个part,但是加入了https协议
  • 记得申请域名(一般是要钱的),并在你的云服务器上申请一个SSL证书,(一般是免费的)我用的是nginx版
  • 下载好证书后跟着云服务器的教程走其实很快 我这里直接上结论了

0.设置安全组

开放对应端口,此处是4004

1.将下载的证书拷贝到当前文件夹

拷贝.crt文件和.key文件到/usr/local/nginx/下的cert文件夹(新建,名字其实不重要)

2.修改nginx.conf

在倒数第二行添加以下字段:

server {
    listen 80;
    listen 4004 ssl;

    server_name 139.XXX.XXX.67 www.XXX.cn XXX.cn; # 我的域名

    # ssl on;
 
    ssl_certificate /usr/local/nginx/cert/server.crt;
 
    ssl_certificate_key /usr/local/nginx/cert/server.key;
 
    ssl_session_timeout 5m;
    
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    
    ssl_prefer_server_ciphers on;
    
    location /  {
                   root html; #站点目录
                   index index.html index.htm;
                }
    
    location /helloWorld {
            include uwsgi_params;
            # proxy_pass http://0.0.0.0:6111;  # 用不了,An error occurred
            # proxy_pass http://【公网IP】:6111;  # 用不了,An error occurred
            uwsgi_pass 0.0.0.0:6111;  # 可以使用,记得配置uwsgi.ini两处改动
            # uwsgi_pass 【公网IP】:6111;  # 可以使用,记得配置uwsgi.ini两处改动
            # uwsgi_pass unix:/root/hitsz/uwsgi_useless/uwsgi/uwsgi.sock;
            # 测试了一下,下面三行注释掉好像也能跑,但是最好加上
            uwsgi_param UWSGI_PYHOME /root/hitsz/csdnV3/venv;  # 虚拟环境所在文件夹
            uwsgi_param UWSGI_CHDIR /root/hitsz/csdnV3;  # 主文件夹
            uwsgi_param UWSGI_SCRIPT nginx_uwsgi_flask:app;  # 左:.py的名字 右:.py里Flask的对象
            }
   }
  • location部分与之前一致
  • 细心观察就会发现这里跟.conf中注释掉的https段很像~
  • (这段代码90%来自华为云官方)

3.启动uwsgi和nginx

最好是kill掉全部然后重启

运行结果

可能遇到的问题

  • 单纯的打不开
    把nginx和uWSGI都kill掉,重启大法好❀
  • 欢迎补充…

根据进程名字、进程号进行调试

常见的几个跟进程相关的指令(不好使)

ps -ef | grep 【进程名字】 # 也可以查看进程
ps aux | grep '【进程名字】'  # 可以查看进程

# kill
kill -9 【进程号】  # 杀死某个进程
killall -s 9 -i【进程名字】  # 杀死带这个名字的全部进程 -i可以一一确认

参考资料
杀linux进程的几种命令详解


拉跨了家人们,不知道为什么┭┮﹏┭┮
在这里插入图片描述

新的方法

找到了新的方法,能实现关键字匹配的目的?

ps -aux|grep 【关键字】|grep -v grep|cut -c 9-15|xargs kill -9

from:
关键字:linux,Kill,多个进程kill

注意关键字是uWSGI不是uwsgi!!!

结语:

  • 终于完全实现了大概一年前自己提的那个问题,还是有点感慨hhhh
  • 这次更新距离上次有接近十个月,现在疫情都放开了(虽然我的大学生活一去不复返了> <)我凭借着微弱的记忆力和自己之前的博客捡回来了,看来自己当初的目的达到了!
  • 希望这份博客也能给各位观众带来帮助吧,欢迎大家在评论区提出问题或者私信我~
  • 虽然但是,我知道前面几期博客逻辑可能乱八七糟的,在很努力的梳理了!
  • 修改了3.5期的部分表达和标题,跟3.75期的互动更强了
    觉得有帮助的可以点个赞或者收藏,这真的能让我开心很久!o( ̄▽ ̄)ブ
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_51772802/article/details/126396195
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2023-01-03 18:05:50
  • 阅读 ( 500 )
  • 分类:Go Web框架

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢