引子
在 MacOS 中,非 root 用户是无法使用小于1024的常用端口的。但是,实际开发中可能必须要用到 80 端口, 那我们就可以通过端口转发来实现。
解决
sudo vim /etc/pf.conf |
编辑 pf.conf
文件,在 rdr-anchor "com.apple/*"
下方,加入如下语句:
rdr pass on lo0 inet proto tcp from any to 127.0.0.1 port 80 -> 127.0.0.1 port 8080 |
意思是将任何来自网卡 lo0
对 ip 为 127.0.0.1
,且 80
端口的TCP请求,转发到 127.0.0.1
的 8080
端口上。
保存文件后,再执行 sudo pfctl -f /etc/pf.conf
以重新加载文件配置
最后执行 sudo pfctl -e
完成服务的启动。注:系统重启后,需要重新执行该命令
这样就可以实现 nginx
实际监听 8080
端口,但是通过 http://localhost/
或 http://127.0.0.1/
来访问。
深入
上面的方法,只能解决本机访问的情况。但是现实中,很有可能需要跟同事联调,那上文所提到的语句就不够用了。
但是聪明的你应该有发现,我在解释那个语句的时候,有提到 网卡
、 127.0.0.1
等关键字,我们可以利用这个来解决我们的需求。
首先,我们知道 *nix
系统下,查看本机 ip 的命令是 ifconfig
,如下图(图片来源于网络)
图中所标出的 192.168.3.94
就是本机的局域网 ip。
再注意看图片左侧,你会发现有 lo0
、 en0
的文字,这个就是对应的网卡名称。我们可以看到 192.168.3.94
所对应的网卡名称是 en0
,那么我们就可以根据这两个参数,写出下列语句:
rdr pass on en0 inet proto tcp from any to 192.168.3.94 port 80 -> 127.0.0.1 port 8080 |
这样就可以解决局域网内,其他人的访问问题了。
同理,你还可以用此方法解决诸如 443
等其它端口的问题,不再赘述。