赞
踩
之前学习wordpress时,因为对Linux不熟悉,所以原计划是基于windows server + IIS,但是中途遇到一个500错误,看了很多资料都没能解决,所以最终还是用了Linux. 之后对整个体系有了一些了解,重拾原计划,又遇到一些新问题,折腾一番后,有了许多新的认识。
记录备忘。
在基于Linux的笔记中,总结了6项。
https://blog.csdn.net/m0_54284125/article/details/134346019
仔细想下,其实合并成5项比较贴切:
服务器操作系统
这个是基础,所有的软件必须运行在操作系统之。
Web服务器软件
最常见的是IIS, Apach, Nginx. IIS主要配套用于Windows Server。
php 程序
不解释, php都不理解,折腾啥网站嘛。
以上3样是最根本的,有这些,就可以做网站了。WordPress只是一个便利化工具而已
总的感觉是, 在Windows Server + IIS 上配置wordpress 比在Linux + Apach上要复杂得多。
先列出总结的最关键的雷区:
upload_tmp_dir = C:/inetpub/wwwroot/wp-content/temp
。 如果想用系统默认的临时目录,要给用户ISUR加上写权限。我用的是腾讯云轻量应用服务器,Windows Serve版本是 2012 R2 Datacentere,其它版本界面可能会不一样,但方法大同小异。
“控制面板” --> “程序和功能” --> “启用或关闭Windows功能”
会启动“服务器管理器”的"添加角色和功能向导”。
选择 “Web服务器(IIS)”, 最重要的是一定要勾选"应用程序开发"下的CGI
安装结束后,可以测试是否成功,方法是在在客户端面浏览器上输入http://ip (或domain)/
或者在server的浏览器里输入http://localhost/
如果能看到下面的页面,说明IIS能正常工作了。
背后的原理很简单,在IIS web根目录(如果没做特殊设置的话是C:\inetpub\wwwroot)下有一个iisstart.htm文件。这个页面显示的是这个文件的内容
成功后,可以启动IIS管理器看看。发现它的版本是6.2, 比较老了。
接下来进一步设置wwwroot文件夹的访问权限。
在c:\inetpub\wwwroot目录上点右键,选择"安全" ,为Users和IIS_IUSRS增加"修改"权限。IUSE、IIS_IUSRS组是IIS的内置用户名和用户组,可以参考微软官方文档:
IIS 7.0 及更高版本的默认权限和用户权限
大体上相当于Apach的apach:apach用户组和用户名
下载
php下载地址: https://windows.php.net/download
注意要下载non-thread-safe 的版本, 64bit (32bit操作系统已经不常见了)
更要注意下载的版本,要确保跟wordpress版本兼容。
安装
php是免安装的,所谓的安装就是解压缩而已。将下载的php文件解压,比如c:\php
下载安装Visual C++ Redistributable(C++ 应用程序运行时组件包)
下载php时会注意到,官网上说"More recent versions of PHP are built with VC15 or VS16 (Visual Studio 2017 or 2019 compiler respectively) and include improvements in performance and stability. The VC15 and VS16 builds require to have the Visual C++ Redistributable for Visual Studio 2015-2019 x64 or x86 installed"。所以需要下载安装Visual C++ Redistributable for Visual Studio 2015-2019 x64 or x86, 官网上有下载链接。
配置php.ini
将php文件夹根目录里的php.ini-development或者php.ini-production改名为php.ini
然后打开php.ini, 修改以下选项。这些选项原文件里前面有; 注释掉,去掉该分号,如果是设置目录路径的,根据你php实际路径设置。前5个是关键后,后面那些扩展看情况启用。
extension_dir = "ext" cgi.force_redirect = 0 cgi.fix_pathinfo = 1 fastcgi_impersonate = 1 upload_tmp_dir = C:/inetpub/wwwroot/wp-content/temp date.timezone = RPC extension=curl extension=gd2 extension=gmp extension=imap extension=mbstring extension=mysqli extension=openssl extension=pdo_mysql extension=soap extension=sockets
配置"模块映射"
配置"默认文档"
这是为wordpress做准备,因为wordpress用的是php, 而且default页面是index.php, 加了index.php以后,可以把其它的删掉。
配置php.ini更新监测
配置环境变量
在系统环境变量PATH中把php的路径加上去
验证php配置是否成功
创建一个php文件,比如说info.php ,放入以下代码。
<?php
phpinfo();
?>
保存后,在浏览器上打开这个文件
http://localhost/info.php
如果看到类似以下页面,说明php安装成功,运行正常.
IIS + php 学习实践过程中参考了以下文章,感谢他们的分享!
windows IIS安装php服务及配置
Windows Server上安装部署WordPress
在CentOS上实践时我用的是MariaDB, 结果在windows上到官网上找了半天也没发现下载的链接,所以就到Oracle官网下了MySQL 5.7, 下载后才发现这个是要手工安装的。
有些麻烦,好在找到了一篇靠谱的文章:
Window 安装 MySQL 5.7.31 免安装版
总结以下要点:
[client] port=3306 default-character-set=utf8 [mysqld] # 设置为MYSQL的安装目录 basedir = "C:/MySQL" # 设置为MYSQL的数据目录 datadir = "C:/MySQL/data" port=3306 character_set_server=utf8 sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER #开启查询缓存 explicit_defaults_for_timestamp=true
设置环境变量, 加入mysql关键目录
新建2个用户变量:
MYSQL_HOME 值:C:\MYSQL
MYSQL_PATH 值:%MYSQL_HOME%\bin
修改用户变量 Path, 加入:%MYSQL_PATH%;%MYSQL_HOME%\lib;%MYSQL_HOME%\lib\plugin;
修改系统变量Path, 加入:%MYSQL_PATH%;%MYSQL_HOME%\lib;%MYSQL_HOME%\lib\plugin;
安装mysql
用管理员身份启动cmd
(1) 安装
mysqld -install
成功的话会提示: Service successfully installed.
(2) 初始化
mysqld --initialize-insecure
执行的时候可以看到mysql在往新建的data目录里写入文件。
如果data目录里已经有文件存在,会终止并提示data目录有文件,无法进行。这时只需要把data目录里的文件全删掉再重新执行命令就行了.
(3) 启动mysql
net start mysql
修改root 用户密码
初始安装后, root 用户是没有密码的。用mysql -u root -p 登录,要求输密码时直接按回国即可。
设置密码。
为wordpress创建database, 用户,给用户分配此database的操作权限
从这里开始,跟installer安装的情况就没有区别了。
特别注意,一定要记得要把新建的datase的操作权限分配给新建的用户。不然会有500错误。
wordpress 的安装配置跟Linux下基本是一样的。
403错误
从client端不带文件名访问时出错。
从server端访问,错误描述更详细
错误描述容易误导人,按它的建议,需要开启目录浏览功能。当然不能这样。
实际的问题是:php配置时忘记把默认文档改成index.php了,导致IIS在/wp-admin/下没找到合适的默认文档,所以会认为用户是要浏览目录。配置默认文档后就解决了.
502错误
client端忘记截屏了,server端浏览器上显示如下。怀疑是Visual C++ Redistributable与php版本不兼容造成的。改用php8.0后错误消失。
client端的错误提示一般都比较简略,在server端就清晰得多,所以有问题了,在server端复现一下会有帮助
PS:关于版本问题,可能不是root cause, 因为想补截一个图,我把php8.2又换回来了,神奇的是,它居然可以用了。待进一步研究
500 错误
有好几种不同的500错误
这个根据提示,在IIS里正确配置php文件与php-cgi.exe的映射后解决了。
还有一个忘记截屏了,是忘记给wordpress的数据库user做授权引起的。
无法上传media文件
这个在Linux 服务器上也遇到的, 当时是因为忘记把/var/www/html/wp-content 这个目录及下辖的文件用户改为apach引起的。
同样的问题在Windows Server上也发生了,但是解决起来困难了很多。
(1) 不管从client还是server的浏览器上,提示都很简单,只知道发生错误了。
依据之前的经验,推测是文件权限引起的。但是试过了,主题可以正常安装,说明文件夹权限不是问题。试着把wp-content\uploads 目录删掉,然后在setting 里去年/勾选"Organize my uploads into month- and year-based folders", 发现uploads目录被自动创建了,而且年、月目录也被自动创建了。更进一步确认了不是目录权限造成的。
在server端浏览器上测试时,发现wordpress提供浏览器内置功能上传模式, 类似这样: http://host/wp-admin/media-new.php?browser-uploader
用这个更糟糕,直接报500错误,但是有意思的是,在这个模式下,切换到multi-file uploader后,它给出了有用的错误信息:Missing a temporary folder.
这一下方向就明确了。
网上查到一篇解决方案,啰啰嗦嗦一长篇(原文链接),其实就是说要在wp-config.php里加上一句 define('WP_TEMP_DIR', dirname(__FILE__) . '/wp-content/temp/');
, 然并卵。
直到看到这篇文章(原文), 才真正明白问题的根源是:默认 php 进程会读写系统的临时目录(Windows 默认为 C:/windows/temp,Linux 为 /tmp),显然只需要修改php.ini中的这个配置就可以了:
修改后实测成功。
明白原理后,自然会想,如果不改php.ini配置, 直接修改系统临时目录的访问权限应该也行得通(纯测试,正式环境这样肯定不是好办法) 。
实测证实了此想法。
先注释掉php.ini的修改,然后修改c:\windows\temp的权限,增加IUSR用户的读写权限,重启IIS后,仍然可以成功上传。注意,实测下来加用户组IIS_IUSRS用户组无效。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。