分类 网络相关 下的文章

网上很多错误,然后又复制粘贴的错误信息,结果不正确的比正确的还多,这里做一个整理

请您从https://cygwin.com 下载setup-x86.exe或setup-x86_64.exe文件

首先自用电脑安装cygwin64 ,默认下一步,网站列表选[推荐选择] 华为的服务器 不要像百度搜索的选网易,这坑货文件不完整的.


在选择包列表,选择curl、cron、bzip2、wget、gcc-core、gcc-g++、make、openssh、lynx,然后下一步
curl wget是必选的
openssl 是可选(建议独立安装吧)

#没选到?可以试试静默安装 把安装文件拖进命令窗口 加上参数
setup-x86_64.exe --packages curl,wget,openssl --upgrade-also --site https://repo.huaweicloud.com/cygwin/

添加path环境变量 C:\cygwin64\bin;C:\cygwin64\usr\local\bin


运行cygwin64

安装acme
wget -O - https://get.acme.sh | sh
(或者curl https://get.acme.sh | sh)

新建文件 C:\cygwin64\home\[你的电脑用户名]\domain.sh

#sh acme.sh --upgrade
#更新acme
# 替换成从阿里云控制台的API 参数
export Ali_Key="###"
export Ali_Secret="####"
# 换成自己的域名
sh acme.sh --issue --dns dns_ali -d [你的域名] -d *.[你的域名]
#API参数 参考https://github.com/Neilpang/acme.sh/blob/master/dnsapi/README.md

好了,现在已经完成申请证书的步骤.
接下来续订和生成pfx
新建文件autoacme.bat

chdir c:\cygwin64\bin
bash --login -i -c 'sh acme.sh --upgrade'
#更新acme
bash --login -i -c 'sh acme.sh --issue --dns dns_ali -d [你的域名] -d *.[你的域名]'
#更新证书
openssl pkcs12 -export -out C:\Users\[你的电脑用户名]\Desktop\nenge.pfx -inkey C:\cygwin64\home\[你的电脑用户名]\.acme.sh\[你的域名]\[你的域名].key -in C:\cygwin64\home\[你的电脑用户名]\.acme.sh\[你的域名]\[你的域名].cer -certfile C:\cygwin64\home\[你的电脑用户名]\.acme.sh\[你的域名]\ca.cer -passout pass:123456
#生成pfx

我的openssl是外部安装的如果你是cygwin64内安装则改为

bash --login -i -c 'openssl'
pkcs12 -export -out C:\Users\[你的电脑用户名]\Desktop\nenge.pfx -inkey C:\cygwin64\home\[你的电脑用户名]\.acme.sh\你的域名\[你的域名].key -in C:\cygwin64\home\[你的电脑用户名]\.acme.sh\[你的域名]\[你的域名].cer -certfile C:\cygwin64\home\[你的电脑用户名]\.acme.sh\[你的域名]\ca.cer -passout pass:123456

新建计划任务,设定三个月提醒你续订证书,或者不用计划任务,自己两个月左右更新一次即可.没必要天天更新.

[你的域名] => 如 nenge.net
[你的电脑用户名] => 如 administrator
证书密码为123456

power sell替换IIS证书

$h = "nenge.net"
$p = ConvertTo-SecureString "123456" -AsPlainText -Force
$pfx = "c:\nenge.net.pfx"
Get-ChildItem "cert:\LocalMachine\My" | where-object { $_.Subject -like "*$h*" }  | Remove-Item
Import-PfxCertificate -FilePath $pfx -CertStoreLocation "Cert:\LocalMachine\My" -Password $p

下载地址:H5ai
如果已经有web.config则在对应位置添加

                <rule name="rew" enabled="true" stopProcessing="true">
                <match url="^(.*)$" ignoreCase="true" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" />
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    <add input="{URL}" pattern="\/$" />
                </conditions>
                <action type="Rewrite" url="/_h5ai/public/index.php" appendQueryString="true" />
            </rule>

增加规则

模式:^(.*)$
条件:逻辑分配,全部匹配,增加条件如下

  • {REQUEST_FILENAME} 是目录
  • {REQUEST_FILENAME} 不是文件
  • {URL} 与模式匹配 模式:/$

操作属性

重写URL: /_h5ai/public/index.php
附加查询字符:选上
停止处理后续规则:选上

IIS执行PHP出现500错误原因(权限不足)

IIS中应用程序池的运行账户(标识)有以下4个选项

  • LocalService 本地服务
  • LocalSystem 本地系统
  • NetWorkService 网络服务
  • ApplicationPoolIdentify

默认情况下新建的应用程序池标识为ApplicationPoolIdentify,官网文档解释(传送门)为:
大概的意思:在IIS7.5以后的版本中,新建的所有程序池默认运行标识为ApplicationPoolIdentity。启动该应用程序池时,会自动创建一个与应用程序池同名的虚拟账户来运行该进程。
说它是虚拟的,是因为在用户管理里看不到该用户或用户组,在命令行下输入net user也无法显示,但该帐号又是确实存在的。可以通过任务管理器观察到w3wp.exe这个web程序进程是以应用程序的名称作为用户名运行的。


解决方法

在文件夹安全,增加权限用户,手动输入:“IIS AppPoolDefaultAppPool”(即IIS AppPool应用程序池名),但是window2008会提示无法找到。

使用管理员身份命令

icacls c:\wwwroot /C /grant "IIS AppPool\DefaultAppPool":(CI)(OI)RW

那么就给wwwroot目录增加了 一个读写权限的DefaultAppPool用户。这时候运行PHP就不会出现500错误。