Mac 自带 Apache 服务器,咱们在终端输入sudo apachectl -k start
打开网页输入localhost
,发现网页会显示以下:php
Apache 服务器启动成功。html
例如须要修改/etc/apache2
文件夹下 http.conf 文件web
cd /etc/apache2
shell
sudo cp httpd.conf httpd.conf.bak
apache
sudo cp httpd.conf.bak httpd.conf
vim
经过 Xcode 修改比较简单,将文件脱出到桌面一份,修改后拖回原来的文件夹覆盖便可。浏览器
注意的是,在系统目录下是不能够直接用 Xcode 修改的,可将文件复制到桌面上,用 Xcode 打开修改,而后拖入系统目录下覆盖便可。bash
经过 vim 修改文件,可直接修改系统文件,修改比较方便。如下修改系统配置文件用到vim,若是不习惯使用vim修改,可以使用 Xcode 编辑修改。服务器
sudo vim httpd.conf
。esc
键退出编辑。:wq
退出并保存;若是编辑错误输入:q!
不保存文件,强制退出vi。咱们在当前用户根目录下新建一个web文件夹,而后放入一些文件,如图所示:网络
切换工做目录下:cd /etc/apache2
备份文件:sudo cp httpd.conf httpd.conf.bak
用vim编辑httpd.conf文件:sudo vim httpd.conf
将下面路径更改成你本身web网页路径(约245行)
DocumentRoot "/Library/WebServer/Documents"
<Directory "/Library/WebServer/Documents”>
修改成我当前用户目录下创建的一个 web 文件夹
DocumentRoot "/Users/lf/web"
<Directory "/Users/lf/web”>
复制代码
Options FollowSymLinks Multiviews
修改成
Options Indexes FollowSymLinks Multiviews
复制代码
#LoadModule php7_module libexec/apache2/libphp7.so
修改成
LoadModule php7_module libexec/apache2/libphp7.so
较旧的系统为(#LoadModule php5_module libexec/apache2/libphp5.so)
复制代码
而后按 ESC 键退出编辑,输入:wq
保存退出。
终端中输入sudo apachectl -k restart
重启 Apache 服务器。
开启 apache 服务器.打开浏览器,搜索框中输入127.0.0.1
或者localhost
就能够看到咱们以前添加的网络资源。
# 启动 apache 服务器
sudo apachectl -k start
# 从新启动 apache 服务器
sudo apachectl -k restart
# 关闭 apache 服务器
sudo apachectl -k stop
复制代码
重启的时候发现报错,但不影响使用
AH00558: httpd: Could not reliably determine the server's fully
qualified domain name, using LFdeMacBook-Pro.local. Set the
'ServerName' directive globally to suppress this message
复制代码
若是想解决此报错,可再次编辑 httpd.conf 文件
sudo vim httpd.conf
将下面的#号注释去掉,并修改(约221行)
#ServerName www.example.com:80
修改成
ServerName localhost:80
复制代码
而后终端输入下面指令重启便可。
sudo apachectl -k restart
复制代码
iOS7.1 之后, Apple 再也不支持 HTTP 方式的 OTA ,因此须要为 Apache 开启 HTTPS 服务,并利用 OpenSSL 制做自签名证书。
sudo mkdir /private/etc/apache2/ssl
cd /private/etc/apache2/ssl
sudo openssl genrsa -out server.key 1024
复制代码
生成以下所示文件
sudo openssl req -new -key server.key -out server.csr
复制代码
注意:须要完整填写各项信息,注意Common Name
必须是服务器 ip 或域名,其余信息能够随意填写。例如我须要把 ipa 安装包放在 192.168.1.188 的内网服务器上,则Common Name
就填写 192.168.1.188 。若是这一步漏填信息,可能会致使最后生成的 ca 文件是空的。
sudo openssl req -new -x509 -days 365 -key server.key -out ca.crt
复制代码
填写信息和上面的填写的同样便可,注意Common Name
必须填写,这里仍是填写192.168.1.188便可。
在 ssl 目录下建立 demoCA 文件夹,而后进入 demoCA ,建立一个 index.txt 和 serial文件,index.txt 为空, serial 内容为01,而后在 demoCA 中再建立一个空文件夹 newcerts
sudo mkdir demoCA && cd demoCA
sudo mkdir newcerts
sudo touch index.txt
sudo touch serial
复制代码
使用 Xcode 或者 vim 编辑 serial 文件,第一行写入 01 保存便可。
执行命令,返回到ssl文件夹下面
cd /private/etc/apache2/ssl
复制代码
而后执行命令,用ca进行签名生成server.crt
sudo openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile server.key
复制代码
这一步可能会报以下错误
Using configuration from /private/etc/ssl/openssl.cnf
variable lookup failed for ca::default_ca140736040362952:
error:0E06D06C:configuration file routines:NCONF_get_string:
no value:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/
libressl-22.50.2/libressl/crypto/conf/conf_lib.c:323:group=ca name=default_ca
复制代码
这是因为/private/etc/ssl/
文件夹下缺乏 openssl.cnf 的问题,解决办法是拷贝一份,输入命令
cp /usr/local/etc/openssl/openssl.cnf /private/etc/ssl/openssl.cnf
复制代码
使用Xcode或者vim修改/private/etc/ssl/openssl.cnf
文件,这里使用vim直接修改
sudo vim /private/etc/ssl/openssl.cnf
复制代码
dir = ./demoCA # Where everything is kept
修改成当前你的demoCA路径
dir = /private/etc/apache2/ssl/demoCA
复制代码
修改完成后再执行命令
sudo openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile server.key
复制代码
会提示有效期和生成证书,都输入y便可。
Certificate is to be certified until Nov 10 06:39:36 2019 GMT (365 days)
Sign the certificate? [y/n]:y
(翻译)证书有效期至11月10日06:39:36 2019 GMT(365天)
1 out of 1 certificate requests certified, commit? [y/n]y
签署的证书吗?
(翻译)1 / 1的证书请求被认证,提交?
复制代码
此时咱们看到 HTTPS 证书已经生成完成。
sudo vim /private/etc/apache2/httpd.conf
复制代码
把如下四行代码前头的注释去掉
LoadModule ssl_module libexec/apache2/mod_ssl.so
LoadModule socache_shmcb_module
libexec/apache2/mod_socache_shmcb.so
Include /private/etc/apache2/extra/httpd-ssl.conf
Include /private/etc/apache2/extra/httpd-vhosts.conf
复制代码
注意:若是你的 httpd.conf 中缺乏了某行,你能够自行添加进去便可。
编辑前先备份 httpd-ssl.conf 文件
cd /private/etc/apache2/extra/ && sudo cp httpd-ssl.conf httpd-ssl.conf.bak
sudo vim /private/etc/apache2/extra/httpd-ssl.conf
复制代码
把如下两行代码的注释去掉,并编辑为你的证书路径
SSLCertificateFile "/private/etc/apache2/server.crt"
SSLCertificateKeyFile "/private/etc/apache2/server.key"
而后修改路径,改为你的证书文件路径
SSLCertificateFile "/private/etc/apache2/ssl/server.crt"
SSLCertificateKeyFile "/private/etc/apache2/ssl/server.key"
复制代码
编辑前先备份 httpd-vhosts.conf 文件
cd /private/etc/apache2/extra/ && sudo cp httpd-vhosts.conf httpd-vhosts.conf.bak
sudo vim /private/etc/apache2/extra/httpd-vhosts.conf
复制代码
将 <VirtualHost *:80> 中的第二个修改
<VirtualHost *:80>
ServerAdmin 192.168.1.188
DocumentRoot "/Users/lf/web"
ServerName 192.168.1.188
ErrorLog "/private/var/log/apache2/dummy-host2.example.com-error_log"
CustomLog "/private/var/log/apache2/dummy-host2.example.com-access_log" common
</VirtualHost>
复制代码
而后在文件末尾添加 443 端口服务
<VirtualHost *:443>
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /private/etc/apache2/ssl/server.crt
SSLCertificateKeyFile /private/etc/apache2/ssl/server.key
ServerName 192.168.1.188
DocumentRoot "/Users/lf/web"
</VirtualHost>
复制代码
注意:
sudo apachectl configtest
复制代码
若是它提示:Syntax OK
,那就完成90%了,若是它提示有错,那就要根据错误提示自行解决了。
我在这个环节遇到了一个错误
SSLSessionCache: 'shmcb' session cachenot supported
(known names: ). Maybe you need toload the appropriate
socache module (mod_socache_shmcb?).
复制代码
解决办法以下:
sudo vim /private/etc/apache2/httpd.conf
复制代码
而后把如下代码的注释去掉
LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so
复制代码
去掉注释后,保存,从新检查配置,直到成功。
注意: 从网上查找的路径多是LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
, 但个人配置文件中,路径跟上述的不一致,但结尾都是mod_socache_shmcb.so
就对了。
解决方案是参考这篇文章的stackoverflow问答。
重启 Apache 服务sudo apachectl -k restart
, 这样就能够用 https 访问本地服务器了。
以下图所示,在/Users/lf/web
文件夹下放置的资源以下:
文件夹名称可任意取,只要在 index.html 和 plist 文件夹中路径对应便可。index.html 不要更名字,默认。
/private/etc/apache2/ssl/ca.crt
拷贝一份到当前 web 文件夹下APP 打包,导出 ipa 包就不必多说了,能够导出 Ad Hoc 或者 Development 的 ipa 包,将 ipa 放在放在 web 文件夹下 ipa 文件夹中。
想在线安装,还须要一个 plist 文件,每一个 ipa 包对应一个 plist 文件,将https://192.168.1.188/ipa/LFDev_4.2.1.ipa
更改成生成证书时的 ip 或者域名,而后对应 ipa 文件路径便可,例如这里的路经是,在当前 web 文件夹下的 ipa 文件夹中,名称为 LFDev_4.2.1.ipa 的 ipa 文件。
plist 文件格式以下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>https://192.168.1.188/ipa/LFDev_4.2.1.ipa</string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>url</key>
<string>https://192.168.1.188/images/image_57×57.png</string>
</dict>
<dict>
<key>kind</key>
<string>full-size-image</string>
<key>url</key>
<string>https://192.168.1.188/images/image_512×512.png</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.xxx.yyy</string>
<key>bundle-version</key>
<string>4.2.0</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>Cxx</string>
</dict>
</dict>
</array>
</dict>
</plist>
复制代码
在/Users/lf/web
文件夹下还须要一个 index.html 文件, 手机首次使用 OTA 安装,必须先下载安装 ca.crt 证书,而后再点击安装 ipa。 url 中必须填写 https 开头的 plist 文件下载地址,plist 文件中对应 ipa 文件的下载地址。
<html>
<head>
<meta name="viewport"content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h4>手机首次下载请先"点击安装SSL证书",并根据提示安装信任证书</h4>
在 iOS 10.3 及更高版本中,手动安装包含证书有效负载的描述文件时,这个证书不会自动受 SSL 信任。
当安装经过电子邮件发送或从网站下载的描述文件时,您必须手动开启受 SSL 信任。
要为这个证书开启受 SSL 信任,请前往“设置”>“通用”>“关于本机”>“证书信任设置”。在“针对根证书启用彻底信任”下,开启信任这个证书。
<a title="iPhone" href="https://192.168.1.188/ca.crt">👉点击安装SSL证书👈</a>
<hr>
<a href="itms-services://?action=download-manifest&url=https://192.168.1.188/plist/LFAdHoc_4.2.0.plist" class="app_link">👉点击安装4.2.0生产版本👈</a>
<hr>
<a href="itms-services://?action=download-manifest&url=https://192.168.1.188/plist/LFDev_4.2.1.plist" class="app_link">👉点击安装4.2.1开发版本👈</a>
<hr>
<a href="itms-services://?action=download-manifest&url=https://192.168.1.188/plist/LFVali_4.2.1.plist" class="app_link">👉点击安装4.2.1验证版本👈</a>
<hr>
</body>
</html>
复制代码
若是是想 ipa 放在局域网电脑上面,则将当作打包服务器的电脑 ip 手动设置固定 ip:192.168.1.188,而后手机和电脑链接同一个路由器,iphone 的 Safari 浏览器中输入 192.168.1.188 或者 192.168.1.188/index.html 便可,点击安装 SSL 证书,而后点击安装 ipa 包。
若是下载 ipa 时出现没法链接到192.168.*.*
的错误,则须要手动设置信任。
iOS7.0 之后必须使用 HTTPS 进行,iOS 10 以前的设备,直接安装自签名根证书后就能够安装 iOS 应用,可是在 iOS 10.3 以上的设备上,安装后还须要到“关于本机”那里手动开启信任。
苹果官网提示,在 iOS 中信任手动安装的证书描述文件 support.apple.com/zh-cn/HT204…
在 iOS 10.3 及更高版本中,手动安装包含证书有效负载的描述文件时, 这个证书不会自动受 SSL 信任。 当安装经过电子邮件发送或从网站下载的描述文件时, 您必须手动开启受 SSL 信任。 要为这个证书开启受 SSL 信任, 请前往“设置”>“通用”>“关于本机”>“证书信任设置”。 在“针对根证书启用彻底信任”下,开启信任这个证书。
http://stackoverflow.com/questions/20127138/apache-2-4-configuration-for-ssl-not-working