Unraid 安装 WindowsServer2019 虚拟机及 NGINX、PHP、Python 环境
一、安装虚拟机
使用 Unraid 安装。
| 项目 | 值 | |
|---|---|---|
| 初始 内存: | 4096 MB | |
| 最大值 内存: | 6144 MB | |
| 机器: | i440fx-7.2 | |
| BIOS: | OVMF | |
| 启用 USB 启动引导: | No | |
| Hyper-V: | 是 | |
| USB 控制器: | 2.0(EHCI) | |
| 操作系统安装 ISO: | windows_server_2019.iso | |
| 操作系统安装光盘总线: | SATA | |
| VirtIO 驱动程序 ISO: | /mnt/user/isos/virtio-win-0.1.240.iso | |
| VirtIO 驱动程序光盘总线: | SATA | |
| 主要 虚拟磁盘位置: | 固态 | |
| 主要 虚拟磁盘总线: | VirtIO | |
| 主要 串口: | vdisk1 | |
| 启用虚拟控制台拷贝/黏贴: | 是 | |
| 网络资源: | br0 | |
| 网络模式: | virtio-net |
随后通过 VM Console(VNC) 启动,并在 VNC 中立即回车 Enter 加载 ISO 。否则进入 BIOS 命令行。
二、配置基础设置
-
安装
virtio-win-guest-tools。 -
激活
Windows Server 2019 Standard:
N69G4-B89J2-4G8F4-WWYCC-J464C或者使用其他手段。
-
配置 IPv4 内网地址。
-
配置 IPv6 公网地址(参考我的其他文章)。
-
加载系统更新。
-
安装 Edge 浏览器。
安装 VSCode 。
安装 Office 套件。
-
卸载
微软OfficePLUS。卸载
OneDrive。
三、安装 NGINX
-
官网下载解压。
-
设置系统环境变量
PATH,新增C:\Service\nginx-1.24.0\。 -
创建
nginx-start.bat文件,备用开机自启动项目。@echo off C:\Service\nginx-1.24.0\nginx.exe -
创建
nginx-stop.bat文件,备用停止项目。C:\Service\nginx-1.24.0\nginx.exe -s stop -
开放服务端口。
-
进入
控制面板\系统和安全\Windows Defender 防火墙,确保防火墙打开。 -
在
高级设置 -> 入站规则中,新建规则。-
规则类型:
端口 -
应用:
TCP -
特定本地端口:80, 443, 1000-5000(举例)
-
-
-
双击
nginx-start.bat测试,访问http://localhost。
三、安装 PHP
3.1 基本安装
-
安装 visual c++ 2017 (以上)
官网:https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?view=msvc-170 -
官网下载解压。
-
设置系统环境变量
PATH,新增C:\Service\php-8.4.2-Win32-vs17-x64\。 -
下载 RunHiddenConsole.exe 。
-
复制
php.ini-development为php.ini,并修改内容。cgi.fix_pathinfo=1extension_dir = "ext"cgi.force_redirect = 0disable_functions =,(=后无参数)。extension=sqlite3extension=zip
-
修改 NGINX 配置文件
nginx.conf。······ http { ······ server { ······ location / { root html; index index.php index.html index.htm; } ······ location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } ······ } }其中,
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;中/scripts,变为$document_root。如果要设置仅允许特定的 PHP 文件运行访问:
location ~ .php$ { deny all; } # 上传链接 location = /php/upload.php { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # 下载链接 location = /php/download.php { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } -
创建
php-cgi-start.bat文件,备用开机自启动项目 ,并复制到桌面。C:\Service\php-8.4.2-Win32-vs17-x64\RunHiddenConsole.exe /l /r C:\Service\php-8.4.2-Win32-vs17-x64\php-cgi.exe -b 127.0.0.1:9000 -c C:\Service\php-8.4.2-Win32-vs17-x64\php.ini -
创建
php-cgi-stop.bat文件,备用停止项目,并复制到桌面。taskkill /f /im RunHiddenConsole.exe taskkill /f /im php-cgi.exe -
在 NGINX
C:\Service\nginx-1.24.0\html文件夹下创建index.php文件,删除index.html。<?php echo phpinfo(); ?> -
双击运行
php-cgi-start.bat测试,访问http://localhost。
3.2 防护配置
在Windows环境下,Nginx不支持Unix Socket,所以无法直接实现不通过端口访问PHP - CGI。
要让PHP - CGI端口只提供给本机访问,可以通过以下几种方式来实现:
-
配置
php-cgi.exe监听本地地址。在启动
php-cgi.exe时,指定其只监听本地地址127.0.0.1,这样外部网络就无法直接访问该端口。启动命令示例:
php-cgi.exe -b 127.0.0.1:9000 -c 你的php解压目录\php.ini这里的
-b 127.0.0.1:9000参数指定了php-cgi.exe绑定的地址和端口,只绑定在本地地址127.0.0.1上,外部网络无法通过其他IP地址访问该端口。 -
使用防火墙限制访问。
通过 Windows 防火墙或其他防火墙软件,限制对
php-cgi.exe端口的外部访问,只允许本地访问。以 Windows 防火墙为例:
-
打开
控制面板,选择系统和安全中的Windows Defender 防火墙。点击
高级设置,打开Windows Defender 防火墙与高级安全。在左侧导航栏中,选择
入站规则。点击
新建规则,选择端口,点击下一步。指定要限制的端口号(如9000),选择
TCP或UDP(php-cgi.exe通常使用TCP),点击下一步。选择
阻止连接,点击下一步。在
配置文件页面,根据需要选择适用的网络配置文件(如域、私有、公共),点击下一步。给规则命名,例如输入
限制 PHP-CGI 端口,点击完成。
这样设置后,外部网络将无法访问该端口,只有本机可以访问。
-
-
配置Nginx限制访问
虽然这种方法主要是限制对Nginx端口的访问,但也可以间接保护PHP - CGI端口,因为Nginx是PHP - CGI的前端代理。
在Nginx的配置文件中,可以使用allow和deny指令来限制对特定路径或服务的访问。例如,在nginx.conf文件中,可以添加以下配置:
location / { allow 127.0.0.1; # 允许本地访问 deny all; # 拒绝其他所有访问 ... }这样配置后,只有来自本地的请求可以访问Nginx提供的服务,包括对PHP - CGI的请求。不过,这种方法主要是限制对Nginx层面的访问,对于直接访问PHP - CGI端口的情况,还是需要结合上述其他方法来实现更全面的保护。
四、安装 Python
4.1 配置 Python
-
勾选
use admin privileges when installing py.exe。当安装时使用管理员权限。
这是:当在 VS Code 上使用
PHP Server可以执行exec()调动 python 程序,但通过NGINX + PHP环境下执行exec()调动 python 程序失败(总是返回1)的主要原因。 -
勾选
Add python.exe to PATH。 -
选择
Customize installation。 -
勾选
Install Python 3.12 for all users。 -
自定义安装地址。
-
选择
Disable path length limit。取消路径长度限制,Python 安装程序会修改系统的注册表,取消 260 个字符的路径长度限制。这样,Python 可以处理更长的路径,避免因路径过长而导致的错误。
-
安装完成测试
python -V。 -
复制
python.exe为python3.exe以统一支持python3命令。
4.2 配置 pip
在Windows Server 2019上,将pip的源更换为国内源可以加快Python包的下载速度。以下是几种常见的国内源以及更换源的方法:
常见的国内源
清华大学:https://pypi.tuna.tsinghua.edu.cn/simple
中国科技大学:https://pypi.mirrors.ustc.edu.cn/simple/
阿里云:https://mirrors.aliyun.com/pypi/simple/
中国科学院:https://pypi.mirrors.opencas.cn/simple/
华为云:https://mirrors.huaweicloud.com/pypi/simple/
网易:https://pypi.163.com/simple/
南京大学:https://pypi.nju.edu.cn/simple/
临时使用国内源
在使用pip命令时,可以通过-i参数临时指定国内源。例如,使用清华大学的源安装xlwings:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xlwings
永久更换国内源
要永久更换国内源,可以修改pip的配置文件。pip的配置文件通常位于用户目录下的.pip文件夹中,文件名为 pip.conf (Windows 系统中为 pip.ini )。如果该文件夹或文件不存在,可以手动创建。
-
创建配置文件
打开命令提示符(CMD)。
输入以下命令创建.pip文件夹(如果不存在):
mkdir %APPDATA%\pip使用文本编辑器(如记事本)创建pip.ini文件:
notepad %APPDATA%\pip\pip.ini -
编辑配置文件
在pip.ini文件中,添加以下内容(以清华大学源为例):
[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple保存并关闭文件。
-
验证配置
为了验证配置是否成功,可以尝试安装一个包:
pip install xlwings如果配置成功,pip将从指定的国内源下载包。
-
其他常用命令
查看当前配置
pip config list查看帮助信息
pip help
通过以上步骤,你可以将pip的源永久更换为国内源,从而加快Python包的下载速度。
常用项目依赖
pip install xlwings python-docx docx2pdf
五、开机启动设置
Windows 菜单搜索 任务计划, 打开 任务计划程序 。
在 任务计划程序(本地) -> 任务计划程序库 创建 新文件夹 Web 。
在 Web 下创建基本任务 NGINX Server ,触发器选择 计算机启动时 ,操作选择 启动程序 ,选择 NGINX 脚本 C:\Service\nginx-1.24.0\nginx-start.bat 。
创建完成后,双击基本任务 NGINX Server ,打开 NGINX Server 属性 。
在 安全选项 中,设置使用用户账户 Administrator ,勾选 不管用户是否登录都要运行 ,不勾选 不存储密码······ ,勾选 使用最高权限运行 。
六、重启电脑测试
电脑重启后,NGINX 服务应该已启动。
因 PHP 调动 Python 程序的权限异常,故手动通过桌面 php-cgi-start.bat 启动 php-cgi 服务。
七、疑难杂症
-
无法访问其他共享资源
运行输入gpedit.msc打开组策略编辑器,计算机配置 -> 管理模板 -> 网络 -> Lanman工作站 -> 启用不安全的来宾登录->启用。 -
关闭
Ctrl+Alt+Delete解锁屏幕功能。Windows 菜单搜索
本地安全策略,在安全设置 -> 本地策略 -> 安全选项中,设置交互式登录:无需按Ctrl+Alt+Del启用。下次重启后即可。
参考
- Kimi.ai - 帮你看更大的世界 (现在 AI 真是厉害)。

浙公网安备 33010602011771号