# flask_blog **Repository Path**: jingxinhehu/flask_b ## Basic Information - **Project Name**: flask_blog - **Description**: flask项目实战之博客 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 1 - **Created**: 2023-12-04 - **Last Updated**: 2025-07-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于FLASK的个人博客搭建 ## 页面展示 ![](imgs/wangyeshouye.jpg) ![](imgs/guidang.jpg) ![](imgs/biji.jpg) ![](imgs/houtaiwenzhang.jpg) ![](imgs/wangyeshouye.jpg) ![](imgs/houtaifenlei.jpg) ![](imgs/houtaibiaoqian.jpg) ![](imgs/markdown.jpg) ## 搭建步骤 步骤若有不全,请参考[基于flask的个人博客项目从0到1-CSDN博客](https://blog.csdn.net/qq_63188936/article/details/135939161)(互补) ### 1.选择一个服务器 在某云购买服务器,初始化系统,最好是ubantu的,接下来都是基于ubantu来讲的。 ### 2.Miniconda3安装傻瓜式安装 > 如果不想了解详细的过程,可以直接一套命令甩给Linux服务器,直接一步到位进行安装 - **第一步**:下载+安装+许可协议+指定目录+删除安装包(把这个输入到终端就行了) ``` wget https://mirrors.aliyun.com/anaconda/miniconda/Miniconda3-py310_23.3.1-0-Linux-x86_64.sh && bash Miniconda3-py310_23.3.1-0-Linux-x86_64.sh -b -p /root/miniconda3 -f && rm Miniconda3-py310_23.3.1-0-Linux-x86_64.sh ``` 等待回到命令行后输入 `ls`,看到miniconda3即表示完成安装 ![image-20231214170654744](imgs/image-20231214170654744.png) - **第二步**:初始化conda(`~#:`下面直接输入以下命令) ``` ~/miniconda3/bin/conda init bash ``` - **第三步**:激活conda(`~#:`下面直接输入以下命令) ``` source ~/.bashrc ``` 看到`base`开头就表示已经激活`conda`并进入`base`环境 ![image-20231214174707836](imgs/image-20231214174707836.png) 你也可以在此输入`python`就能进去当前`base`环境下的`python`交互式环境 ![image-20231214193015234](imgs/image-20231214193015234.png) **至此已经完成Miniconda3的安装** ### 3.Miniconda3创建环境 - 利用conda新建一个名为 `blog` 的 `python3.10.8` 的虚拟环境,输入以下命令 ```shell conda create -n blog python=3.10.8 ``` - 输入 `y` 确定 ![image-20231214223435285](imgs/image-20231214223435285.png) - 安装完成输入`conda activate blog`进入环境,输入 `python` 进行测试当前版本 ![image-20231214223913328](imgs/image-20231214223913328.png) 出现 `Python 3.10.8` 即代表已经成功的安装了此版本的虚拟环境 ### 4.拉取文件 首先选择一个喜欢的ssh软件,在/var下创建www文件夹 ~#` 下输入 `sudo mkdir -p /var/www` 创建项目文件夹 利用git将工程拉取到/var/www文件夹下 git clone https://gitee.com/jingxinhehu/flask_b.git ### 5.MySQL5.7安装 - 下载 `MySQL` 安装包 ```shell wget https://downloads.mysql.com/archives/get/p/23/file/mysql-server_5.7.42-1debian10_amd64.deb-bundle.tar ``` - 解压文件 ```shell tar -xvf mysql-server_5.7.42-1debian10_amd64.deb-bundle.tar ``` - 删除安装包 ```shell rm -rf mysql-server_5.7.42-1debian10_amd64.deb-bundle.tar ``` ```shell sudo apt install psmisc libaio1 libnuma1 libatomic1 libmecab2 perl ``` - 安装组件(必须按照顺序依次安装) ```shell sudo dpkg -i mysql-common_5.7.42-1debian10_amd64.deb sudo dpkg -i libmysqlclient20_5.7.42-1debian10_amd64.deb sudo dpkg -i libmysqlclient-dev_5.7.42-1debian10_amd64.deb sudo dpkg -i libmysqld-dev_5.7.42-1debian10_amd64.deb ``` - 安装客户端 ```shell sudo dpkg -i mysql-community-client_5.7.42-1debian10_amd64.deb sudo dpkg -i mysql-client_5.7.42-1debian10_amd64.deb ``` - 安装服务端 ``` sudo dpkg -i mysql-community-server_5.7.42-1debian10_amd64.deb sudo dpkg -i mysql-server_5.7.42-1debian10_amd64.deb ``` 进入服务端安装界面,输入 `MySQL` 的密码,回车确认,并会要求你再次输入后回车确认 ![image-20231215144631329](imgs/image-20231215144631329.png) PS:如果提示缺少相关依赖,可以执行 `sudo apt --fix-broken install` 修正安装 - 测试安装结果,输入 `mysql -V` ,能看到版本号即代表安装成功 ![image-20231215150854325](imgs/image-20231215150854325.png) ### 6.MySQL服务管理 ```python # 启动服务 sudo systemctl start mysql # 开机自启动 sudo systemctl enable mysql # 查看状态 sudo systemctl status mysql # 关闭服务 sudo systemctl stop mysql # 重启服务 sudo systemctl restart mysql ``` 这时我们可以输入 `sudo systemctl start mysql`,并且设置 `sudo systemctl enable mysql`,最后输入 `sudo systemctl status mysql`,出现如下日志信息提示即代表成功开启MySQL ![image-20231215151516180](imgs/image-20231215151516180.png) - 进入MySQL, 输入 `mysql -uroot -p` 后,提示你输入密码,输入密码后回车即可进入MySQL ![image-20231215151620913](imgs/image-20231215151620913.png) ### 7.安装项目依赖 * 进入文件夹 ``` cd /var/www/flask_blog ``` - 安装依赖工具 ``` sudo apt-get install pkg-config ``` - 下载项目所需依赖 ```python pip install -r requirements.txt # 如果遇上error: subprocess-exited-with-error apt-get install libmysqlclient-dev ``` - 检查安装情况 ``` pip list ``` * 初始化mysql ``` flask_blog/start/settings.py SQLALCHEMY_DATABASE_URI = 'mysql://root(账号):密码@127.0.0.1:3306/blog_db(数据库名)?charset=utf8mb4' ``` - 测试Flask运行 ```python # linux系统下设置启动文件 export FLASK_APP=manage.py # 启动flask flask run ``` ![image-20231215160448611](imgs/image-20231215160448611.png) ------ > 确保环境依赖无误下,可以开始最简单的项目启动,测试项目部署后的效果,目前服务器还没有创建数据库,也没有迁移等操作,所以我们需要先把初始化的任务完成,再进行实测,注意 ❗ :请确保以下操作都在miniconda的虚拟环境下执行 ### 8.项目预启动 #### 8.1创建数据库 ```python # 进入mysql mysql -uroot -p # 创建数据库 create database blog character set utf8mb4; ``` ![image-20231215161826457](imgs/image-20231215161826457.png) `quit` 退出 数据库终端 #### 8.2数据模型迁移 ```python # 设定启动文件 export FLASK_APP=manage.py # 迁移初始化 flask db init # 生成迁移文件 flask db migrate # 迁移文件同步数据库 flask db upgrade ``` - 迁移步骤图解 ![image-20231215162414881](imgs/image-20231215162414881.png) - 迁移结果: ![image-20231215162451880](imgs/image-20231215162451880.png) ------ > 完成数据迁移后,项目是可以正常跑起来并且访问不同的API了,那么我们就用最简单粗暴的方法先让这个项目 `Run` 起来吧! #### 8.3公网访问测试 - 设置启动文件 ``` export FLASK_APP=manage.py ``` - 监听所有可用网络接口IP并在5000端口启动 ``` flask run -h 0.0.0.0 -p 5000 ``` - 利用公网IP启动 ```python # 之前我们在Win上启动都是127.0.0.1那是Win的本地地址,现在可以用公网IP进行访问 # 格式为: 公网IP:5000 http://8.xxx.xxx.xx:5000 ``` ![image-20231215163830877](imgs/image-20231215163830877.png) **PS**:访问的地址不是截图Running的地址,而是你的公网IP,查看公网IP命令 `curl ifconfig.me` ![image-20231215163847935](imgs/image-20231215163847935.png) 输入公网IP和服务器开启的FLASK端口号即可看到项目跑起来了👻 不过目前数据库是没有任何数据的。 ### 9.uWSGI服务器安装 uWSGI全称Web Server Gateway Interface,是一个用于将Web应用程序和Web服务器之间进行通信的协议和软件实现。它不仅仅是一个应用服务器,还可以充当应用容器,提供了一种将Web应用程序与Web服务器解耦的方式。uWSGI 以其强大的性能而闻名,能够有效地处理大量并发请求。它采用多种性能优化策略,使其在高负载环境下表现出色。 也有不少人会用Gunicorn或Waitress去进行Flask的部署,相对于uWSGI而言,它们会更简单和易操作。但是在性能和并发上来说,都不及uWSGI,包括以后我们学习Django也可以用uWSGI去进行部署,并支持容器化部署,可以和Doker良好集成,这些都是十分方便的。 - 安装uWSGI(确保在虚拟环境下) ``` conda install -c conda-forge uwsgi ``` 遇到需要确认的地方,输入 `y` 敲回车确认即可 ![image-20231216003929865](E:/%E6%A1%8C%E9%9D%A2/%E7%AC%AC15%E6%9C%9F%E5%85%A8%E6%A0%88%E5%AE%9E%E6%88%98/3.%20%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/28_10.%20%E9%A1%B9%E7%9B%AE%E9%83%A8%E7%BD%B2/10.%20%E9%A1%B9%E7%9B%AE%E9%83%A8%E7%BD%B2/2_%E8%AF%BE%E4%BB%B6/10.assets/image-20231216003929865.png) - 安装结果测试 ![image-20231216004054992](E:/%E6%A1%8C%E9%9D%A2/%E7%AC%AC15%E6%9C%9F%E5%85%A8%E6%A0%88%E5%AE%9E%E6%88%98/3.%20%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/28_10.%20%E9%A1%B9%E7%9B%AE%E9%83%A8%E7%BD%B2/10.%20%E9%A1%B9%E7%9B%AE%E9%83%A8%E7%BD%B2/2_%E8%AF%BE%E4%BB%B6/10.assets/image-20231216004054992.png) ------ ### 10.uWSGI配置启动 - windows下新建 `uwsgi.ini` 输入如下配置 ``` [uwsgi] module = manage:app home = /root/miniconda3/envs/blog master = true processes = 4 http-socket = 0.0.0.0:5000 threads = 2 ``` - 配置文件解释 ```python # module = manage:app 指定了包含应用程序的 Python 模块和应用程序实例。在这个例子中,manage 是模块的名称,app 是 Flask 应用程序实例的名称 # home = /root/miniconda3/envs/blog 指定了虚拟环境的路径。uWSGI 将使用这个虚拟环境来运行你的应用程序,确保应用程序可以访问所需的 Python 包 # master = true 启用主进程。uWSGI 可以以主进程和工作进程的模式运行,其中主进程负责管理工作进程。设置为 true 表示启用主进程 # processes = 4 指定启动的工作进程数量。在这个例子中,设置为 4,表示将启动 4 个工作进程来处理请求 # http-socket = 0.0.0.0:5000 指定 uWSGI 监听的 HTTP 地址和端口。在这个例子中,uWSGI 将监听所有可用的网络接口 (0.0.0.0) 的 5000 端口 # threads = 2 指定每个工作进程启动2条线程,指定线程的目的是因为项目开了Flask APScheduler,需要开启线程支持,默认不开启多线程 ``` 我们是用工厂模式编写的Flask项目,暴露的app对象在 `manage.py` 中,当你使用这个配置启动uWSGI时,它将利用你miniconda的虚拟环境加载你的Flask应用程序的`app` 并处理传入的请求 - uwsgi.ini 上传(可以将此配置文件丢到项目根目录下) ![image-20231217011639751](imgs/image-20231217011639751.png) - 启动uWSGI(在你的uwsgi.ini文件目录下) ``` uwsgi --ini uwsgi.ini ``` - 浏览器输入公网IP+端口号进行访问,例如我的公网IP为8.111.222.55,则在浏览器中输入 `8.111.222.55:5000` - 访问即可看到此时已经启动4条进程且通过uWSGI服务器通过工厂模式启动了Flask项目,且能看到清晰的路由访问 ![image-20231217011705683](imgs/image-20231217011705683.png) 可以自行测试API的响应速度可以发现部分资源加载还是比较慢 ------ > 使用 uWSGI 单独是不足以使外网浏览器访问你的应用程序的,因为 uWSGI 本身只是一个应用服务器,负责运行 WSGI 应用程序。虽然WSGI 服务器包含内置的 HTTP 服务器。但是专业的 HTTP 服务器会可能更快,为了从外部访问你的应用程序,你还需要在 WSGI 服务器前面设置一个 HTTP 服务器,也就是反向代理服务器 ### 11.Nginx服务器安装 Nginx是一个高性能的反向代理服务器和Web服务器,它专注于处理静态文件、SSL终结等任务,并能够高效地处理并发请求。Nginx的设计使其非常适合用作前端服务器,可以直接面向互联网,并提供快速的响应和高并发能力。在与uWSGI结合使用时,Nginx通常充当反向代理服务器的角色,负责接收客户端的请求,处理静态文件,并将动态请求传递给uWSGI服务器。 Nginx 解决了服务器的C10K(就是在一秒之内连接客户端的数目为10k即1万)问题。它的设计不像传统的服务器那样使用线程处理请求,而是一个更加高级的机制—事件驱动机制,是一种异步事件驱动结构。它可以轻松在百万并发连接下实现高吞吐量的Web服务,同时诸多应用场景下的问题都可以通过种种Nginx模块得以解决。 一般来说,Nginx和uWSGI的结合使用方式如下: **Nginx作为反向代理服务器:** - Nginx接收来自客户端的HTTP请求 - Nginx处理静态文件请求,提供快速的静态资源服务 - 动态请求传递给uWSGI服务器 **uWSGI作为应用服务器:** - uWSGI负责接收Nginx传递过来的动态请求 - uWSGI与Flask协同工作,处理应用程序逻辑 - uWSGI生成HTTP响应,将其传递回Nginx 这种分工使得Nginx和uWSGI各自发挥其优势,Nginx处理静态文件和反向代理,uWSGI负责处理动态请求。这样的架构提供了更好的性能、可扩展性和安全性。 - 安装 ``` sudo apt-get install nginx ``` - 启动Nginx服务 ``` sudo systemctl status nginx ``` ![image-20231216194037706](imgs/image-20231216194037706.png) - 其他Nginx常用命令 ```python # 停止Nginx sudo systemctl stop nginx # 启动Nginx sudo systemctl start nginx # 重启Nginx sudo systemctl restart nginx # 检查Nginx配置文件正确性 sudo nginx -t ``` ------ > 此时你已经启动Nginx的服务,此时由于服务器默认的安全组限制,我们无法进行测试,这时我们打开阿里云的控制台首页 ### 12.HTTP安全组开启 - 服务器安全组开启80端口 - 直接在浏览器输入公网 IP 就能看到Nginx的提示了 ![image-20231216224819397](E:/%E6%A1%8C%E9%9D%A2/%E7%AC%AC15%E6%9C%9F%E5%85%A8%E6%A0%88%E5%AE%9E%E6%88%98/3.%20%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/28_10.%20%E9%A1%B9%E7%9B%AE%E9%83%A8%E7%BD%B2/10.%20%E9%A1%B9%E7%9B%AE%E9%83%A8%E7%BD%B2/2_%E8%AF%BE%E4%BB%B6/10.assets/image-20231216224819397.png) 80端口是HTTP协议默认的端口号,用于传输Web页面。当你在浏览器中输入一个URL,浏览器会默认使用80端口进行HTTP请求。Nginx的默认配置就会监听80也就是HTTP的基础请求。 ### 13.uWSGI+Nginx部署 首先需要了解到Nginx的配置文件,Nginx的默认配置文件位置在 `etc/nginx` 下,进入此目录找到 `nginx.conf` 即为Nginx的配置文件,如果不了解Linux的命令以及文件编辑等可以将文件下载到本地进行编辑后再上传 - 进入 `etc/nginx`,下载到本地做修改 ![image-20231225152042639](imgs/image-20231225152042639.png) - **打开本地Nginx配置文件** ```nginx http { server { # 监听 http 请求 listen 80; server_name 8.xxx.xx.55; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:5000; } } ... ... } ``` - `http` 块是 Nginx 配置的主要块,包含所有与 HTTP 相关的配置 - `server` 块定义了一个虚拟主机,用于处理来自客户端的请求 - `listen 80;` 指定了监听的端口,即 HTTP 默认端口 - `server_name 8.xxx.xx.55;` 指定了这个虚拟主机的域名或 IP 地址 - `location /` 块定义了对所有请求的处理方式 - `include uwsgi_params;` 引入了一个文件,该文件包含了一些与 uWSGI 相关的参数 - `uwsgi_pass 127.0.0.1:5000;` 指定了将请求代理到本地运行的 uWSGI 服务器的地址和端口 关于更多Nginx的配置文件文档可以参考Nginx官网 `https://nginx.org/en/docs/` Nginx中文极简教程推荐 `https://dunwu.github.io/nginx-tutorial/#/` - **编辑本地uWSGI文件** ``` [uwsgi] module = manage:app home = /root/miniconda3/envs/blog master = true processes = 4 socket = 127.0.0.1:5000 threads = 2 ``` 这里修改的就是通信方式的处理(原来的配置:`http-socket = 0.0.0.0:5000`): - 在仅用uWSGI的时候,可以使用 `http-socket` 用于配置一个支持 HTTP 协议的套接字,可以使 uWSGI 直接处理 HTTP 请求。而 `socket` 协议,用于配置一个通用的套接字,支持多种协议,包括 HTTP 和其他协议,目前我们需要Nginx 通过 uwsgi 协议与 uWSGI 通信,而不是通过 HTTP 协议。以后域名等备案后,也需要定义成 `socket` ,这样可以支持 `HTTPS` 协议 - 在生产环境中,通常不需要直接将 uWSGI 暴露在公共网络上,因此使用 `127.0.0.1` 作为绑定地址是更安全的选择。因此,你可以将 uWSGI 的 `socket` 设置为 `127.0.0.1:5000`,这样只有本地可以访问到 uWSGI。这样做可以提高安全性,因为 uWSGI 不会直接对外暴露,并且只有通过 Nginx 反向代理才能访问 完成上述 Nginx配置文件和uUWGI配置文件后,再次上传至对应的位置,并检查文件正确性开始重启 ```python # 检查Nginx配置文件正确性 sudo nginx -t # 重启Nginx sudo systemctl restart nginx # 重启uWSGI uwsgi --ini uwsgi.ini # 以守护进程方式运行 uWSGI,后台运行,并将输出写入到日志文件中。不再在控制台打印日志 uwsgi -d --ini uwsgi.ini # 查看进程 ps ax | grep uwsgi # 杀死进程 pkill -f uwsgi -9 ``` 至此你已经完成了 uWSGI + Nginx 的搭配部署,但是这个公网IP地址要分享给别人,不好记忆,所以不妨买一个具有意义的域名,既能方便让人记住也能通过SSL提高网站的安全性 ### 14.域名 购买一个域名,查看域名(需要等待注册局审核才可进行下一步,十几分钟就行),开始解析 ![](imgs/yumiongjiexi.jpg) 解析完之后便有最后两行记录 ![](imgs/2024-01-30_15-36-25.jpg) - DNS解析作用: 这里的 `@` 以及 `www`,表明你可以用此根域名以及`www`的二级域名去访问你的公网IP对应的服务器 例如我购买的域名是 `beautifulblog.cn`当用户访问 `beautifulblog.cn` 以及 `www.beautifulblog.cn `时 阿里云的域名解析服务会将其解析为指定的IP地址,等同于给公网IP取了个别名,因为一长串的IP地址可不好记,后续再根据域名上SSL证书也可以保证你的网站更加的安全 ❗ 注意,此时如果你的服务器没有进行ICP备案的话,是无法进行访问的,所以你需要去购买服务器的云厂商那里进行服务器的备案 * 如果你成功备案后,使用域名进行DNS解析后,就能访问到网站的80端口也就是Nginx的欢迎界面 ### HTTPS之SSL证书 免费证书仅供测试使用,由于免费证书的兼容性不如正式证书,若将免费证书应用在正式项目中可能存在潜在风险从而影响业务,出于对业务稳定的考虑,建议您购买正式证书使用。这里展示阿里云的。 - 阿里云免费SSL证书领取及操作 ``` https://help.aliyun.com/zh/ssl-certificate/getting-started/get-started-with-free-certificates?spm=a2c4g.11186623.0.0.77445a83vxDobn ``` - 打开教程进入到免费证书界面 ![image-20231223140950959](imgs/image-20231223140950959.png) ![image-20231223141504733](imgs/image-20231223141504733.png) - 审核后需要去添加一条域名解析,教程会提示你该如何操作,可以点击验证查看 ![image-20231223145141596](imgs/image-20231223145141596.png) - 保留此页面去到DNS解析页面 ![image-20231223145421907](imgs/image-20231223145421907.png) - 进入到DNS解析页面,点击添加记录,将 `记录类型`、`主机记录`、`记录值` 复制SSL证书提供的值填好,确认添加解析 ![image-20231223145344115](imgs/image-20231223145457890.png) - 稍等片刻会发送邮箱 和 短信通知告知证书申请情况,再次回到SSL证书页面,点击下载 ![image-20231223151118500](imgs/image-20231223151118500.png) ![image-20231223151220329](imgs/image-20231223151220329.png) - 选择Nginx下载 ![image-20231223151303293](imgs/image-20231223151303293.png) - 将下载的压缩包解压可以看到两个密钥 **Key文件(私钥文件):** - **文件扩展名:** 通常是 `.key` 或 `.pem`。 - **内容:** 包含私钥,是一种用于加密和解密通信数据的机密密钥。私钥应该始终保持秘密,不与他人共享。 - **作用:** 在SSL/TLS通信中,私钥用于对传输的数据进行加密和解密,以确保通信的保密性。私钥也用于数字签名,以验证通信另一端的身份。 **PEM文件:** - **文件扩展名:** `.pem`。 - **内容:** PEM(Privacy Enhanced Mail)文件格式是一种常见的存储证书、密钥等信息的文件格式。PEM文件通常包含Base64编码的数据,可以是证书、私钥、公钥等。 - **作用:** 在TLS通信中,PEM文件通常包含SSL/TLS证书(包括公钥)、私钥以及可能的中间证书颁发机构(CA)证书链。PEM文件用于配置Web服务器以启用HTTPS。 综合来说,私钥文件(key文件)包含用于加密和解密的私钥,而PEM文件通常用于存储SSL/TLS证书、私钥和其他相关信息。在配置Web服务器以支持HTTPS时,这些文件是必需的组成部分。 - `etc/nginx` 下新建 `conf` 文件夹, 将密钥文件上传 ![image-20231223151715460](imgs/image-20231223151715460.png) 如果要开启HTTPS协议传输,需要开启443端口,并且安装部署SSL证书后才能进行访问 所以在这还需要去Nginx进行443端口的配置,❗ 同时也要去安全组那块打开 443端口 - 本地修改Nginx配置文件再上传 ```nginx http { server { # 监听 http 请求 listen 80; server_name fengsir.cc www.fengsir.cc; # 重定向到https协议 return 301 https://$host$request_uri; } server { # 监听 HTTPS 请求 listen 443; server_name fengsir.cc www.fengsir.cc; charset utf-8; ssl on; # 配置证书以及密钥 ssl_certificate conf/fengsir.cc.pem; ssl_certificate_key conf/fengsir.cc.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 / { include uwsgi_params; uwsgi_pass 127.0.0.1:5000; } } ## # Basic Settings ## ... } ``` 配置解释: - `listen 443;`: 指定Nginx监听的端口号是443,这是HTTPS默认的端口号 - `server_name fengsir.cc www.fengsir.cc;`: 定义了该服务器块所对应的域名。这个服务器块将处理来自 `fengsir.cc` 和 `www.fengsir.cc` 的请求 - `charset utf-8;`: 设置字符集为UTF-8,以确保正确处理文本编码 - `ssl on;`: 启用SSL,表示这是一个HTTPS连接 - `ssl_certificate conf/fengsir.cc.crt;`: 指定SSL证书文件的路径,该文件包含了服务器的公钥和其他相关信息 - `ssl_certificate_key conf/fengsir.cc.key;`: 指定SSL私钥文件的路径,该文件包含了与SSL证书相对应的私钥 - `ssl_session_timeout 5m;`: 设置SSL会话超时时间为5分钟 - `ssl_protocols TLSv1 TLSv1.1 TLSv1.2;`: 指定支持的SSL/TLS协议版本 - `ssl_ciphers ...;`: 指定支持的加密算法和密码套件 - `ssl_prefer_server_ciphers on;`: 设置服务器优先使用自己定义的密码套件 - `location / { ... }`: 配置了Nginx的`location`指令,用于处理匹配 `/` 路径的请求。在这里,它包含了一个配置块,通过`uwsgi_pass`指令将请求传递给后端uWSGI服务器(运行在`127.0.0.1:5000`) - 完成配置上传后 ```python # 检查Nginx配置文件正确性 sudo nginx -t # 重启Nginx sudo systemctl restart nginx ``` - 重启Nginx后再次访问 `https://.......` 即可看到页面展示