由于項目本身的原因,開發(fā)必須使用80端口實現(xiàn),而在Unix內(nèi)核中非Root用戶無法直接使用1024以下的端口,最初作者找到了pfctl的方式實現(xiàn)80端口轉(zhuǎn)發(fā)到8080端口實現(xiàn)訪問,經(jīng)過親測出現(xiàn)了最為嚴(yán)重的問題,按照當(dāng)時的方法配置好之后發(fā)現(xiàn)本機Mac通過localhost/<項目名>和127.0.0.1/<項目名>可以訪問,此時很是興奮,但出現(xiàn)了最根本的問題,那就是同局域網(wǎng)內(nèi)其他機器通過訪問IP地址/<項目名>(例如:IP地址是192.168.0.106,那么其他機器訪問192.168.0.106/<項目名>)卻訪問不到,本來就是為了實現(xiàn)同網(wǎng)段開發(fā)和測試并行,結(jié)果其他機器卻無法訪問意味著這一次的搬磚是竹籃打水。
后來作者就利用Nginx進行80端口轉(zhuǎn)發(fā)到Tomcat的8080端口實現(xiàn)訪問,作者親測果然好使,好了廢話不多說了,干貨走起來~~下面就是詳細的配置步驟:
環(huán)境
Mac OS版本: 10.12.6
Nginx版本: 1.12.1
安裝
作者使用Homebrew安裝庫
brew search nginx
brew install nginx
這樣安裝好之后你會發(fā)現(xiàn)nginx的監(jiān)聽端口是8080,并非80,那么此時你就需要更改Nginx的監(jiān)聽端口,那么這一步就很關(guān)鍵了,不能按照以往傳統(tǒng)的方式去更改,讀者請仔細看一下部分。
由于Mac OS是自帶Apache服務(wù)的,它本身占用了80端口,首先你需要將Apache的監(jiān)聽端口改為其他或者直接將其卸載,作者是改掉它的監(jiān)聽端口為8011。
命令行
sudo vim /etc/apache2/httpd.conf
圖片中紅色框打開原本是80端口,作者已將其改為8011。

改動之后,將其重啟 sudo /usr/sbin/apachectl restart
到這里,你已經(jīng)將80端口釋放掉了。
其次你需要了解的就是plist文件。plist就是property list format的意思,是蘋果用來保存應(yīng)用數(shù)據(jù)的格式,其實就是個xml??梢栽?usr/local/opt/nginx 下找到nginx對應(yīng)的plist文件,比如在作者電腦上是 homebrew.mxcl.nginx.plist 。
它的內(nèi)容如下:
<?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>Label</key>
<string>homebrew.mxcl.nginx</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
<key>ProgramArguments</key>
<array>
<string>/usr/local/opt/nginx/bin/nginx</string>
<string>-g</string>
<string>daemon off;</string>
</array>
<key>WorkingDirectory</key>
<string>/usr/local</string>
</dict>
</plist>
需要把這個文件復(fù)制到 /Library/LaunchDaemons 下,如果是 ~/Library/LaunchAgents 也可以,但兩者有區(qū)別。
前者是系統(tǒng)啟動時啟動,后者則是在用戶登錄時啟動。 接著執(zhí)行l(wèi)aunchctl load -w,如下:
sudo cp /usr/local/opt/nginx/*.plist /Library/LaunchDaemons
sudo chown root /Library/LaunchDaemons/homebrew.mxcl.nginx.plist
執(zhí)行上面的命令首先給文件賦權(quán)限,而后執(zhí)行下面的命令
sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.nginx.plist
最后,重啟你的機器,你會發(fā)現(xiàn)nginx在80端口啟動了,試著通過http://localhost直接訪問,若出現(xiàn)下邊圖片的顯示則意味著你的Nginx的80端口已經(jīng)配置完成,意味著你已經(jīng)完成了六成的工作。

如果你Tomcat的端口是8080,此時你便要啟動它,之所以在此時啟動Tomcat是為了先讓Tomcat占用8080端口,因為在后面配置Nginx轉(zhuǎn)發(fā)時需要配置8080端口的轉(zhuǎn)發(fā),為了在那個時候不被Nginx搶先占用8080端口(這里也可以不啟動Tomcat,只要你在配置好nginx轉(zhuǎn)發(fā)配置后不要立刻啟動nginx服務(wù)即可,因為啟動它便直接占用8080端口實現(xiàn)轉(zhuǎn)發(fā),而這時其實你還未使用8080端口)導(dǎo)致Tomcat的啟動的失敗,因此可以先讓Tomcat占用端口而后在進行Nginx對8080端口的映射轉(zhuǎn)發(fā)。
此時你的Tomcat已經(jīng)啟動好了,此時我們開始配置Nginx的轉(zhuǎn)發(fā)配置:
命令行
sudo vim /usr/local/etc/nginx/nginx.conf
你只需關(guān)心server節(jié)點內(nèi)的配置即可

server下的結(jié)點:
listen:監(jiān)聽80端口
server_name:轉(zhuǎn)發(fā)到哪個地址
proxy_pass:代理到哪個地址
這其中幾項配置完畢,我們將Nginx重啟(重啟是需要切換到Nginx目錄下的) sudo /usr/local/Cellar/nginx/1.12.1/bin/nginx -s reload
到這里所有的操作都已完畢,現(xiàn)在你和你同一網(wǎng)段下的其他伙伴就可以通過直接訪問IP地址/<項目名> 訪問你的Tomcat項目了。
相關(guān)命令操作
Apache命令
停止服務(wù):sudo /usr/sbin/apachectl stop
開啟服務(wù):sudo /usr/sbin/apachectl start
重啟服務(wù):sudo /usr/sbin/apachectl restart
Nginx命令(需要在Nginx的目錄下執(zhí)行,目錄:/usr/local/Cellar/nginx/1.12.1/bin/)
開啟:sudo nginx
重啟:sudo nginx -s reload
關(guān)閉
首先 ,查詢nginx主進程號(帶有master標(biāo)識的進程):ps -ef|grep nginx
正常停止 sudo kill -QUIT 主進程號
快速停止 sudo kill -TERM 主進程號
感謝以下博客的博主
http://www.cnblogs.com/kavlez/p/start-nginx-on-port-80-at-os-x.html
http://blog.csdn.net/seafishyls/article/details/44546809
http://www.cnblogs.com/94cool/p/3927084.html