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

apache_conf.png
改動(dòng)之后,將其重啟 sudo /usr/sbin/apachectl restart
到這里,你已經(jīng)將80端口釋放掉了。
其次你需要了解的就是plist文件。plist就是property list format的意思,是蘋(píng)果用來(lái)保存應(yīng)用數(shù)據(jù)的格式,其實(shí)就是個(gè)xml??梢栽?usr/local/opt/nginx 下找到nginx對(duì)應(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>
需要把這個(gè)文件復(fù)制到 /Library/LaunchDaemons 下,如果是 ~/Library/LaunchAgents 也可以,但兩者有區(qū)別。
前者是系統(tǒng)啟動(dòng)時(shí)啟動(dòng),后者則是在用戶(hù)登錄時(shí)啟動(dòng)。 接著執(zhí)行l(wèi)aunchctl load -w,如下:
sudo cp /usr/local/opt/nginx/*.plist /Library/LaunchDaemons
sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.nginx.plist
最后,重啟你的機(jī)器,你會(huì)發(fā)現(xiàn)nginx在80端口啟動(dòng)了,試著通過(guò)http://localhost直接訪問(wèn),若出現(xiàn)下邊圖片的顯示則意味著你的Nginx的80端口已經(jīng)配置完成,意味著你已經(jīng)完成了六成的工作。

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

Nginx_conf.png
server下的結(jié)點(diǎn):
listen:監(jiān)聽(tīng)80端口
server_name:轉(zhuǎn)發(fā)到哪個(gè)地址
proxy_pass:代理到哪個(gè)地址
這其中幾項(xiàng)配置完畢,我們將Nginx重啟(重啟是需要切換到Nginx目錄下的) sudo /usr/local/Cellar/nginx/1.12.1/bin/nginx -s reload
到這里所有的操作都已完畢,現(xiàn)在你和你同一網(wǎng)段下的其他伙伴就可以通過(guò)直接訪問(wèn)IP地址/<項(xiàng)目名> 訪問(wèn)你的Tomcat項(xiàng)目了。
相關(guān)命令操作 Apache命令
停止服務(wù):sudo /usr/sbin/apachectl stop
開(kāi)啟服務(wù):sudo /usr/sbin/apachectl start
重啟服務(wù):sudo /usr/sbin/apachectl restart
Nginx命令(需要在Nginx的目錄下執(zhí)行,目錄:/usr/local/Cellar/nginx/1.12.1/bin/)
開(kāi)啟:sudo nginx
重啟:sudo nginx -s reload
關(guān)閉
首先 ,查詢(xún)nginx主進(jìn)程號(hào)(帶有master標(biāo)識(shí)的進(jìn)程):ps -ef|grep nginx
正常停止 sudo kill -QUIT 主進(jìn)程號(hào)
快速停止 sudo kill -TERM 主進(jìn)程號(hào)
- nginx如何配置同一個(gè)端口轉(zhuǎn)發(fā)多個(gè)項(xiàng)目
- nginx實(shí)現(xiàn)數(shù)據(jù)庫(kù)端口轉(zhuǎn)發(fā)
- nginx進(jìn)行端口轉(zhuǎn)發(fā)的實(shí)現(xiàn)
- 使用Docker安裝Nginx并配置端口轉(zhuǎn)發(fā)問(wèn)題及解決方法
- 使用Nginx實(shí)現(xiàn)端口轉(zhuǎn)發(fā)TCP代理的實(shí)現(xiàn)示例
- Nginx服務(wù)器中配置非80端口的端口轉(zhuǎn)發(fā)方法詳解
- nginx通過(guò)四層代理實(shí)現(xiàn)端口轉(zhuǎn)發(fā)的示例代碼
相關(guān)文章
nginx的master進(jìn)程和worker進(jìn)程用法解讀
Nginx啟動(dòng)后包含master和worker進(jìn)程,master負(fù)責(zé)管理worker及讀取配置,worker處理請(qǐng)求,通過(guò)worker_processes設(shè)置worker數(shù)量(通常不超過(guò)CPU核心數(shù))或auto自動(dòng)檢測(cè),結(jié)合worker_cpu_affinity綁定CPU核心以?xún)?yōu)化性能2025-07-07
Nginx實(shí)戰(zhàn)之反向代理WebSocket的配置實(shí)例
最近在工作中遇到一個(gè)需求,需要使用 nginx 反向代理websocket,經(jīng)過(guò)查找一番資料,目前已經(jīng)測(cè)試通過(guò),所以這篇文章主要給大家介紹了Nginx反向代理WebSocket配置的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-04-04
nginx生成自簽名SSL證書(shū)配置HTTPS的實(shí)現(xiàn)
本文主要介紹在Nginx中生成自簽名SSL證書(shū)并配置HTTPS,包括安裝Nginx、創(chuàng)建證書(shū)、配置證書(shū)以及測(cè)試訪問(wèn),具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03
centos8安裝nginx1.9.1的詳細(xì)過(guò)程
這篇文章主要介紹了centos8安裝nginx1.9.1的詳細(xì)過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08

