title
前言:Windows环境下网站环境配置基本思路和linux是一致的,需要linux系统下lnmp环境安装流程的可以看之前的文章


Windows网站配置修改和路径path添加略有不同,这里简写成WNMP(windows+ nginx + mariadb/mysql + php),那么开始逐个组件下载安装配置吧!

一、组件下载

1.Nginx

访问http://nginx.org/en/download.html 获取windows版本的nginx
这里直接下载http://nginx.org/download/nginx-1.21.4.zip zip包
解压到c:/Wnmp/ 目录下,即C:/Wnmp/nginx-1.21.4

2.Mysql/Mariadb

下载windows x64版本安装包文件MSI,默认是最新的10.6.5 :
https://mariadb.org/download/?t=mariadb&p=mariadb&os=windows&cpu=x86_64&pkg=msi
你也可以自行选择zip包,这里演示zip包为mariadb-10.6.5-winx64.zip,解压到
C:/Wnmp/mariadb-10.6.5-winx64

3.PHP for Windows

访问此页面选择你需要的版本:
https://windows.php.net/download/
一般来说windows环境下我们使用fast CGI线程来执行访问php,所以组合搭配non thread safe版本就行,提升效率,并且不用进行线程安全锁定,具体介绍可以参看:https://www.php.cn/php-weizijiaocheng-418642.html
这里选择的是php-7.4.26-nts-Win32-vc15-x64版本演示,下载zip包解压到:
C:/Wnmp/php-7.4.26-nts-Win32-vc15-x64
php8.0版本语法不支持传参为null的方式,如果你选择这个,那么typecho只能下载最新开发版,而且兼容小问题不少,这里直接用低版本的php吧

可选:
如果你的windows系统没有VS环境包,运行报错缺少VCRRUNTIME140.dll之类的,建议下载:
https://docs.microsoft.com/en-US/cpp/windows/latest-supported-vc-redist?view=msvc-170
Visual Studio 2015, 2017, 2019, and 2022这个包对应的x64安装包即可
如果你想要cmd命令行窗口后台运行,可以下载
https://redmine.lighttpd.net/attachments/660/RunHiddenConsole.zip
这里就随意放到
C:/Wnmp/
调用这个小工具启动php就可以保持程序在后台持续运行

以上,全部解压到合适的位置后,根据你的实际路径,我们添加系统PATH:
编辑一个 Set-wnmp-path.txt文档,填入如下内容:

setx /m Path "%PATH%;C:\Wnmp\nginx-1.21.4;C:\Wnmp\mariadb-10.6.5-winx64\bin;C:\Wnmp\php-7.4.26-nts-Win32-vc15-x64;"

并保存为.bat 批处理文件,执行,查看我的电脑 右键 属性 >>>系统高级设置>>>高级菜单>>>环境变量选项>>>系统变量>>>选择Path (路径)检查是否成功;
你也可以搜索Path/系统环境变量 ,来快速访问。
如果你以前配置过当前用户的Path变量的话,上述设置中的%PATH%组成将会是系统Path+用户Path组合,如果不需要用户Path,则建议使用cmd指令set >> c:\environment.txt 导出所有Path到指定位置,将其中需要的系统Path部分取出替换上述bat脚本中的%PATH%,最后请注意windows系统一般只支持最大1023字节的Path总长度,如超过长度,自行删减。
需要的组件全部下载完毕,设置好路径之后.cmd输入:

php -v
mysqld -V
nginx -v

查看是否设置成功
然后选择一个你喜欢的做站路径,这里演示为

C:\Wnmp\www\omo.moe

接下来就可以开始配置各个组件的详细参数了。

二、配置参数

我们依次配置第一步中各个组件

1.首先php配置

找到C:\Wnmp\php-7.4.26-nts-Win32-vc15-x64
将默认的 php.ini-development 复制一份为php.ini
编辑php.ini
修改以下配置,按需自行增减:

; On windows:
;extension_dir = "ext"

修改为

extension_dir = "C:/Wnmp/php-7.4.26-nts-Win32-vc15-x64/ext"

;cgi.fix_pathinfo=1

修改为

cgi.fix_pathinfo=0

默认是1,会有一定的安全风险,我们将通过fastcgi_param SCRIPT_FILENAME $request_filename方式来处理,搭配关闭pathinfo获得安全保障
此设置拓展阅读参看:
https://php.net/cgi.fix-pathinfo
https://bugs.php.net/bug.php?id=50852&edit=1

按需修改:

upload_max_filesize = 2000M
max_execution_time = 300
post_max_size = 80M
extension=curl
extension=fileinfo
extension=gd2
extension=gettext
extension=mbstring
extension=openssl
extension=pdo_mysql
extension=sockets

开启需要的extensions:
你的数据库使用不同则选择对应的,比如pdo_sqlite,很多博主的typecho数据库应该选择的是sqlite,或者mysqli则是mysql数据库专用插件。
php -m可以查看你下载的php包含的所有插件,大佬也可以自己编译需要的插件放到ext目录下

对比linux系统下:

yum install php-fpm php-mysql

我们发现没有php-fpm,windows版本的使用php-cgi.exe来执行fastcgi模块,默认是无法动态生成子进程进行管理的,目前来说解决方案有两个:
一是通过https://github.com/deemru/php-cgi-spawner 或者魔改的xxfpm 来实现子进程生成和管理;
二是手动配置bat脚本并配置nginx的fastcgis_pass 单端口模式为php_pool池模式,来生成多个php_pool负载均衡,获得类似多个子进程的效果,
参看:https://www.nginx.com/resources/wiki/start/topics/examples/phpfastcgionwindows/
这块暂且不谈,我们先连通nginx fastcgi和php:
基本流程是 启动 php-cgi.exe -b 127.0.0.1:9000 通过nginx的配置文件加入:
fastcgi_pass 127.0.0.1:9000
就可以持续传递php文档请求给php-cgi进行解析了
我们继续

2.nginx配置调试

找到nginx目录下的 nginx.conf
去掉以下注释:

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;
}

先做个测试配置:

worker_processes 4;
events
{
  worker_connections 1024;
}
error_log C:/Wnmp/nginx-1.21.4/logs/error.log;
http
{
  include mime.types;
  default_type application/octet-stream;
  server
  {
    listen 80;
    index index.html index.htm index.php;
    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;
    }
  }
}

工作进程数按vps配置来,我这4cores设置成4(官方说实际上没什么卵用):
开始测试:
cmd输入
php-cgi -b 127.0.0.1:9000
启动我们的php-cgi监听
netstat -anob | findstr :9000
查看是否运行
如果要指定php.ini配置路径,参考指令:php-cgi -b 127.0.0.1:9000 -c C:\Wnmp\php-7.4.26-nts-Win32-vc15-x64\php.ini
然后新开一个cmd

cd C:\Wnmp\nginx-1.21.4
start nginx / nginx -s start

打开浏览器,输入http://127.0.0.1应该可以看到nginx默认欢迎页面
我们在/html目录下新建一个a.php,内容为

<?php phpinfo(); ?>

再打开浏览器输入http://127.0.0.1/a.php
应该就能看到详细的php配置参数了
FastCGI
我们注意到Server API CGI/FastCGI
则说明fast-cgi桥梁打通,测试成功

nginx -s quit
退出nginx

温馨提示:

如果你在启动nginx各种测试中忘记退出当前pid对应进程,导致积压了一堆后台进程的话,可以输入
taskkill /F /IM nginx.exe > nul
清理所有的nginx任务,或者以下方法进行指定进程清理:

cd C:\Wnmp\nginx-1.21.4
tasklist | findstr "nginx.exe"

或者tasklist /fi "imagename eq nginx.exe"
任选一个指令查看隐藏的nginx进程对应的pid数字,将数字写入 ./log/nginx.pid

20672 | Out-File -Encoding ASCII ./logs/nginx.pid
nginx -s quit

退出后再次查询进程列表:
tasklist | findstr "nginx.exe"
找到新的进程id,重复以上步骤直到全部正确退出,从内存释放。

3.配置mariadb

打开cmd
cd C:\Wnmp\mariadb-10.6.5-winx64\bin
参看
https://dev.mysql.com/doc/refman/8.0/en/windows-install-archive.html 查看帮助,
首先在mariadb目录下新建配置文件,以my.ini命名,同时手动创建对应的data文件夹:

[mysqld]
basedir=C:\\Wnmp\\mariadb-10.6.5-winx64
datadir=C:\\Wnmp\\mariadb-10.6.5-winx64\\data
#port=3306
character_set_server=utf8
sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER
#default_authentication_plugin=mysql_native_password
max_connections=20

如需远程访问,自行去掉对应端口注释#,如果你经常使用一些旧版本的工具插件,可选择默认配置加密方式为旧版mysql_native_password,
mysql8.0+默认的加密方式为caching_sha2_password,
mysql8.0加密方式切换
输入ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';即可修改root用户的加密规则以及密码。
mariadb会默认寻找windows系统目录%WINDIR%,以及C:\ 然后是安装目录下的my.ini文件,然后是my.cnf文件读取配置,具体的逻辑如下:
Table 4.1 Option
Files Read on Windows Systems

File NamePurpose
%WINDIR%my.ini, %WINDIR%my.cnfGlobal options
C:my.ini, C:my.cnfGlobal options
BASEDIRmy.ini, BASEDIRmy.cnfGlobal options
defaults-extra-fileThe file specified with --defaults-extra-file, if any
%APPDATA%MySQL.mylogin.cnfLogin path options (clients only)
DATADIRmysqld-auto.cnfSystem variables persisted with SET PERSIST or SET PERSIST_ONLY (server only)

建议只在mariadb根目录下创建my.ini,不要多处放置,路径要么双反斜杠\\,要么单斜杠/.

初始化下数据库配置:
mariadb-install-db
建议设置下默认配置文件路径,当然一般纯净环境也不会出现错乱
mariadbd --defaults-file=C:\\Wnmp\\mariadb-10.6.5-winx64\\my.ini --console
如果需要远程访问,注意允许数据库通过防火墙。
防火墙
--console开启控制台消息方便查询错漏;

正常来说应该可以看到如下就绪提示:
2021-12-09 21:28:54 0 [Note] mysqld: ready for connections.
Version: '10.6.5-MariaDB' socket: '' port: 3306 mariadb.org binary distribution
窗口挂在那不要关闭,然后你就可以新开一个cmd窗口进行登录操作配置了

mariadbd --install xxxx安装对应windows服务,不取名的话,默认则是MySQL(无力吐槽mariadb核心还是mysql的模样)
mariadbd --remove xxxx删除对应名称服务;
官方推荐mysql-install-db.exe/mariadb-install-db.exe生成数据库进行操作会更加安全可靠,并可以直接生成windows服务,创建root用户密码,创建对应数据文件夹下my.ini配置文件等。
直接指令安装,不用配置文件的方法为管理员身份启动cmd并输入:

mariadb-install-db.exe --datadir=C:\\Wnmp\\www\\mariadb --service=Mariadb --password=yourpassword

启动此数据库则输入:

sc start Mariadb

如需删除,则先停止此服务再删除:

sc stop Mariadb
sc delete Mariadb
rmdir /s /q C:\Wnmp\www\mariadb

如上,启动对应数据库服务后,输入
mariadb -u root -p登录
密码为你刚才配置的密码
Mariadb开启普通日志等:
my.ini配置文件mysql栏下新增

general_log_file        C:/Wnmp/www/mariadb/mysql.log
general_log             = 1

登录mysql开启 :
SET GLOBAL general_log ='ON';
https://stackoverflow.com/questions/5441972/how-to-see-log-files-in-mysql

三大件基本测试配置完成,我们可以做最终调试了。

4.综合调试

之前提到windows环境下nginx默认没有php-fpm管理子进程负载均衡的,
一是通过https://github.com/deemru/php-cgi-spawner 或者魔改的xxfpm来实现子进程生成和管理;
二是手动配置bat脚本并配置nginx的fastcgis_pass模式为php_pool池模式,来生成多个php_pool负载均衡,获得多个子进程的效果。
这里演示第二种方法,配置nginx的php_pool模式分配多个服务,对接我们多个php-cgi主进程进行负载均衡,提升效率:
新建nginx-php启动脚本,放置于C:Wnmp下,也就是RunHiddenConsole.exe所在位置,命名:Start-nginx-php.bat 内容为:

@echo off
set php_home=C:\Wnmp\php-7.4.26-nts-Win32-vc15-x64
set nginx_home=C:\Wnmp\nginx-1.21.4
:start-php
echo Starting PHP FastCGI...
set PHP_FCGI_MAX_REQUESTS=1000
set PHP_FCGI_CHILDREN=1
RunHiddenConsole %php_home%\php-cgi.exe -b 127.0.0.1:9000 -c  %php_home%\php.ini
RunHiddenConsole  %php_home%\php-cgi.exe -b 127.0.0.1:9001 -c  %php_home%\php.ini
RunHiddenConsole  %php_home%\php-cgi.exe -b 127.0.0.1:9002 -c  %php_home%\php.ini
RunHiddenConsole  %php_home%\php-cgi.exe -b 127.0.0.1:9003 -c  %php_home%\php.ini
:start-nginx
echo Starting NGINX...
RunHiddenConsole %nginx_home%/nginx.exe -p %nginx_home%

再创建nginx-php关闭脚本,命名为Stop-nginx-php.bat 内容为:

@echo off
echo Stopping nginx...
taskkill /F /IM nginx.exe > nul
echo Stopping PHP FastCGI...
taskkill /F /IM php-cgi.exe > nul
exit

nginx目录下conf/nginx.conf里,我们在server区域内加入

upstream php_pool {
ip_hash;
server 127.0.0.1:9000 weight=1 max_fails=3 fail_timeout=20s;
server 127.0.0.1:9001 weight=1 max_fails=3 fail_timeout=20s;
server 127.0.0.1:9002 weight=1 max_fails=3 fail_timeout=20s;
server 127.0.0.1:9003 weight=1 max_fails=3 fail_timeout=20s;
keepalive 30;
}

将fastcgi_pass 项修改为 php_pool
此时你的nginx配置文件看起来应该是这样的:

worker_processes 4;
events
{
  worker_connections 1024;
}
error_log C:/Wnmp/nginx-1.21.4/logs/error.log;
http
{
  include mime.types;
  default_type application/octet-stream;
  server
  {
    listen 80;
    index index.html index.htm index.php;
    location ~ \.php$
    {
      root html;
      fastcgi_pass php_pool;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
    }
  }
  upstream php_pool
  {
    # ip_hash;
    server 127.0.0.1:9000 weight=1 max_fails=3 fail_timeout=20s;
    server 127.0.0.1:9001 weight=1 max_fails=3 fail_timeout=20s;
    server 127.0.0.1:9002 weight=1 max_fails=3 fail_timeout=20s;
    server 127.0.0.1:9003 weight=1 max_fails=3 fail_timeout=20s;
    keepalive 30;
  }
}

务必注意监听端口和php-cgi启动脚本里面的端口一一对应,才能正确传输数据。
ip_hash是以ip的hash值锁定对应用户缓存到指定的php-cgi进程里,保障用户体验,也提升数据安全,这里测试环境不开启此项
keepalive 30秒随意设置吧,效果是等待tcp链接请求空闲30s后关闭对应端口server

将之前C:\Wnmp\nginx-1.21.4\html\a.php测试页面文件增加一个sleep(10):

<?php
sleep(10);
phpinfo();
?>

我们分别在chrome和IE浏览器打开4个窗口访问http://127.0.0.1/a.php
查看 nignx目录下/log/access.log日志可见
多线程处理请求
结果测试IE是32' 35' 37' 38' 多线程连接成功,chrome则是39' 49' 59' 02'似乎chrome的请求是单线程依次请求的?不过基本上可以证明多线程是成功的,接下来用实际站点多设备测试看看。
上面的分配模式,在低负荷场景(比如我这种日ip=1的小博客),单独一个php-fcg主线程其实就足够的,或者一个主线程加set PHP_FCGI_CHILDREN=4,4个子线程也可以做到多线程效果,只不过不是动态分配的,4个子进程会常驻,直到1000请求触发。分为upstream多个站点对接多个php-cgi仅仅是闲的蛋疼做的技术测试,个人使用基本上用不到这样的负载均衡,折腾过程全当练习备用吧。

当然,你也可以使用之前提到的方案一,下载spawner cgi脚本进行管理:
https://github.com/deemru/php-cgi-spawner

事实上,你也可以不去管这块,个人小博客单进程足够同时响应数十个请求(博客又没有sleep 10这种纯测试代码,基本上都是0.xx 秒就完成一个请求的),而且windows环境下最推荐的还是IIS自带网站服务,在大型架构上效率优势会更高,再不济apache也好一些,nginx只是beta版本,开发者这些年来也不热衷于解决windows平台上这些底层效率问题,一心沉迷linux。
最后是数据库的导入和typecho 网站数据的连通,这里和linux环境类似,
sc start Mariadb启动服务之后,登录root用户
mariadb -u root -p --default-character-set=utf8
注意这里要用utf8字符编码方式登录,否则下面导入旧数据中文就会乱码。

CREATE DATABASE typecho_xxx; 
CREATE USER omo_xxx@localhost IDENTIFIED BY 'password'; 
GRANT ALL PRIVILEGES ON typecho_xxx.* TO omo_xxx@localhost IDENTIFIED BY 'password';
//以下为自用的恢复备份流程示例,新站不需要这部分操作:
source C:\Wnmp\2021.12.12-auto-Databases.sql
UPDATE typecho_contents SET text = REPLACE(text,'omo.moe','la.omo.moe');
UPDATE typecho_comments SET url = REPLACE(url, 'https://omo.moe', 'https://la.omo.moe');
UPDATE typecho_options SET `value`  = 'https://la.omo.moe' WHERE  (`name` = 'siteUrl' );
exit;

解压网站数据到 C:\Wnmp\www\omo.moe
修改nginx/conf/nginx.conf配置好ssl路径和证书,顺手做好域名解析
如果你是全新建站,只需要创建typecho需要的数据库和一个管理员赋权对应数据库即可,后面的数据导入和网站数据恢复都不需要操作。

附我的博客配置参考:

worker_processes 4;
events
{
  worker_connections 1024;
}

error_log C:/Wnmp/nginx-1.21.4/logs/error.log;
http
{
  include mime.types;
  default_type application/octet-stream;

  server
  {
    listen 80;
    server_name la.omo.moe www.la.omo.moe;
    return 301 https://la.omo.moe$request_uri;
  }
  server
  {
    listen 443 ssl http2;
    server_name www.la.omo.moe;
    return 301 https://la.omo.moe$request_uri;
  }
  server
  {
    listen 80;
    listen [::]:80 default_server;
    root C:/Wnmp/www/omo.moe;
    index index.html index.htm index.php;
    #charset koi8-r;
    access_log C:/Wnmp/nginx-1.21.4/logs/omo.moe.access.log;

    listen 443 ssl http2 default_server;
    ssl_certificate "C:/Wnmp/nginx-1.21.4/cert/omo_moe.crt";
    ssl_certificate_key "C:/Wnmp/nginx-1.21.4/cert/omo_moe.key";
    ssl_session_timeout 10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_prefer_server_ciphers on;

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html
    {
      root /html;
    }
    location /omomoe
    {
      # 与 V2Ray 配置中的 path 保持一致 ,通过v2ray客户端设置访问路径,通过接头地点初步认定身份
      proxy_redirect off;
      proxy_pass http://127.0.0.1:12345; # 这里按自己喜欢设定,匹配之后v2ray的监听地址从12345接收转发的流量
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_set_header Host $host; # Show real IP in v2ray access.log
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    client_max_body_size 2000m;

    location /
    {
      index index.html index.php;
      if (-f $request_filename/index.html)
      {
        rewrite (.*) $1/index.html break;
      }
      if (-f $request_filename/index.php)
      {
        rewrite (.*) $1/index.php;
      }
      if (!-f $request_filename)
      {
        rewrite (.*) /index.php;
      }
    }
    location ~ \.php
    {
      fastcgi_pass php_pool;
      fastcgi_index index.php;
      include fastcgi_params;
      fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
      fastcgi_param PATH_INFO $fastcgi_path_info;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
    location ~ ^.+\.php
    {
      fastcgi_split_path_info ^(.+\.php)(.*)$;
      fastcgi_param PATH_INFO $fastcgi_path_info;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
    }
    location ~ /.ht
    {
      deny all;
    }
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
      expires 15d;
    }
    location ~ .*\.(js|css)?$
    {
      expires 1d;
    }
  }
  upstream php_pool
  {
    # ip_hash;
    server 127.0.0.1:9000 weight=1 max_fails=3 fail_timeout=20s;
    server 127.0.0.1:9001 weight=1 max_fails=3 fail_timeout=20s;
    server 127.0.0.1:9002 weight=1 max_fails=3 fail_timeout=20s;
    server 127.0.0.1:9003 weight=1 max_fails=3 fail_timeout=20s;
    keepalive 30;
  }
}

三、Typecho博客安装

将你的typecho安装文件
http://typecho.org/downloads/
解压放入网站根目录,打开http://127.0.0.1/install.php开始安装,安装流程选择合适的数据库类型,一路配置下来即可,公网访问请将443,80端口加入防火墙放行即可

一些兼容问题修复:

  • a.登录后台提示:
Notice: Undefined offset: 1 in C:\Wnmp\www\omo.moe\admin\common.php on line 31
Notice: Trying to access array offset on value of type null in /admin/common.php on line 32

https://github.com/typecho/typecho/issues/1244
可以考虑安装最新开发版本
把该文件第 32 行代码 $params = parse_url($currentMenu[2]); 修改为
$params = parse_url(isset($currentMenu[2]) ? $currentMenu[2] : null);

  • b.无法开启https
    在网站根目录下config.inc.php增加
/** 开启HTTPS */
define('__TYPECHO_SECURE__',true);

如果是恢复linux旧站数据,安装空白typecho完毕就可以登录mariadb数据库 source指令导入旧数据库,以及覆盖博客网站数据文件到对应目录
之后再将当前windows版本的配置和数据备份一份,以后就可以直接拷贝恢复了。

四、网站配置环境开机自启动

nginx自启动可以将bat脚本加入任务计划程序,也可以尝试使用nssm管理器安装配置服务

1.将bat脚本加入任务计划程序

选择计算机管理>>系统工具>>任务计划程序>>任务计划程序库 创建任务(快捷搜索task也可以打开)
在弹出的任务属性菜单,常规 取名,启动选择不管用户是否登录都要运行,勾选不存储密码,选择使用最高权限运行,手动输入system,选择system角色启动
选择触发器栏目,设置启动时触发,激活于当前时间即可,
延迟合适的秒数和分钟即可,不满意预设可以手动输入时间。
选择操作栏目,操作设置为启动程序,选择程序脚本C:\Wnmp\Start-nginx-php.bat起始于C:\Wnmp
选择条件栏目,都不要勾选
选择设置栏目,最下面如果此任务已经运行,选择规则为:请勿启动新实例
这样一个计划任务就成功加入,咱们的启动nginx-php脚本就可以开机自动执行了,mariadb那边已经自动创建了windows服务,默认设置的是自动,就不用额外配置了

我的计划任务xml配置参考,你可以保存为xxx.xml文件后导入此配置

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2021-12-15T17:20:39.3416042</Date>
    <Author>WINDOWS\Administrator</Author>
  </RegistrationInfo>
  <Triggers>
    <BootTrigger>
      <StartBoundary>2021-12-15T09:19:31.8870853Z</StartBoundary>
      <Enabled>true</Enabled>
      <Delay>PT1M</Delay>
    </BootTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>S-1-5-18</UserId>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>false</AllowHardTerminate>
    <StartWhenAvailable>true</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
    <UseUnifiedSchedulingEngine>false</UseUnifiedSchedulingEngine>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
    <Priority>7</Priority>
    <RestartOnFailure>
      <Interval>PT1M</Interval>
      <Count>30</Count>
    </RestartOnFailure>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>C:\Wnmp\Start-nginx-php.bat</Command>
      <WorkingDirectory>C:\Wnmp\</WorkingDirectory>
    </Exec>
  </Actions>
</Task>

计划任务管理参考文章
当然你也可以将bat脚本加入开机启动文件夹快捷方式,设置开机自启动:
文件资源管理器地址栏输入
C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
或者win+R呼出运行框,输入shell:startup打开开机启动项
将你的启动nginx bat脚本创建快捷方式放到此文件夹,开机登录当前用户即可,很简单,但是弊端是你注销了当前用户那就不会运行了,不太适合vps使用(得登录)。开机快捷方式自启动参考文章
nssm管理器创建nginx服务也比较简单,这里略过,网上教程很多

2.V2ray服务端的配置和细节

最后这个附送的V2ray服务端配置简单说说:

v2ray配置直接照搬linux就行,记得使用windows版本的zip包,V2ray本身就是全能路由功能,服务端和客户端于一体。
config.json配置文件里面的

"streamSettings":
{
  "network": "ws",
  "wsSettings":
  {
    "path": "/omomoe"
  }
}

path路径记得和上面提到的nginx的网站配置文件里面location /区域里的path一致即可

V2ray配置参考

{
    "stats": {},
    "log": {
        "loglevel": "warning",
        "access": "C:/Software/v2ray-windows-64/access.log",
        "error": "C:/Software/v2ray-windows-64/error.log"
    },
    "api": {
        "tag": "api",
        "services": [
            "StatsService"
        ]
    },
    "policy": {
        "levels": {
            "0": {
                "statsUserUplink": true,
                "statsUserDownlink": true
            }
        },
        "system": {
            "statsInboundUplink": true,
            "statsInboundDownlink": true
        }
    },
    "inbounds": [{
            "port": 12345,
            "protocol": "vmess",
            "settings": {
                "clients": [{
                        "email": "a@omo.moe",
                        "id": "UUID_1",
                        "level": 0,
                        "alterId": 0
                    },
                    {
                        "email": "b@omo.moe",
                        "id": "UUID_2",
                        "level": 0,
                        "alterId": 0
                    },
                    {
                        "email": "c@omo.moe",
                        "id": "UUID_3",
                        "level": 0,
                        "alterId": 0
                    }
                ]
            },
            "streamSettings": {
                "network": "ws",
                "wsSettings": {
                    "path": "/omomoe"
                }
            }
        },
        {
            "listen": "127.0.0.1",
            "port": 8080,
            "protocol": "dokodemo-door",
            "settings": {
                "address": "127.0.0.1"
            },
            "tag": "api"
        }
    ],
    "outbounds": [{
        "protocol": "freedom",
        "settings": {}
    }],
    "routing": {
        "settings": {
            "rules": [{
                "inboundTag": [
                    "api"
                ],
                "outboundTag": "api",
                "type": "field"
            }]
        },
        "strategy": "rules"
    }
}


开机自启动可以参考nginx网站环境自启动操作加入bat脚本即可,或者单独加入计划任务程序,那么启动后延迟时间建议略晚于网站环境。
要么使用nssm管理服务或者其他小工具,或者不在乎GUI占用内存资源的话,下载
v2rayNG设置勾选开机自启动也行。

关于windows端网络加速这个意义不大,过时的锐速本质多倍发包,不是很推荐,本来windows的v2ray也就是备用玩玩,能用就行,有大佬推荐好的加速工具不妨留言交流

到此,windows系统下网站环境nginx+php+mysql/mariadb和v2ray简单应用就配置完毕了,
不难,但是很多细节操作对于萌新来说还是有点烦恼的,网络上关于windows版本的配置细节是各种残缺错漏野路子乱操作很多,花费了4,5天才理清,真是一言难尽
最后希望能对你有所帮助,少走一点弯路,让网络分享少一份抄袭,多一点自己的思考。

Last modification:June 9, 2022
If you think my article is useful to you, please feel free to appreciate