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