OS X - 在80端口启动Nginx

不知道你是怎么在你的mac上安装nginx的,但是如果你跟我一样:

brew install nginx

然后你会发现你的nginx.conf中的端口是8080。
于是你可能像我一样试着把端口改为80,然后reload一下。

你发现没有任何错误提示,当你访问localhost时却没有nginx的首页,甚至连403也没有。

于是你尝试...

sudo lsof -n -i:80 | grep -i LISTEN

却发现没有输出和nginx有关的任何东西。
于是才想起OSX不允许system级以外的服务使用1024以下的端口。

起初我并没有太关心这个问题,我并不介意多输入几个数字。
直到我加入了一个新的团队,我和我那些使用其他操作系统的同事们统一了hosts,并使用同一个数据库进行开发时才意识到 —— 我可能因为这个问题给别人造成麻烦。

launchd

关于launchd的描述,这里引用一下manpage,如下:

launchd manages processes, both for the system as a whole and for individual users.
The primary and preferred interface to launchd is via the launchctl(1) tool which (among other options) allows the user or administrator to load and unload jobs.
Where possible, it is preferable for jobs to launch on demand
based on criteria specified in their respective configuration files.
launchd also manages XPC services that are bundled within applications and
frameworks on the system.
During boot launchd is invoked by the kernel to run as the first process on
the system and to further bootstrap the rest of the system.
You cannot invoke launchd directly.

launchd用于为系统和用户管理进程,主要通过launchctl对其进行操作,用户无法直接调用launchd。
启动时由内核调用launchd,运行第一个进程。

plist

另外我们需要了解的就是plist文件。
plist就是property list format的意思,是苹果用来保存应用数据的格式,其实就是个xml。
可以在 /usr/local/opt/nginx 下找到nginx对应的plist文件,比如在我的电脑上是 homebrew.mxcl.nginx.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>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>

我们需要把这个文件复制到 /Library/LaunchDaemons 下,如果是 ~/Library/LaunchAgents 也可以,但两者有区别。
前者是系统启动时启动,后者则是在用户登录时启动。
接着执行launchctl load -w,如下:

sudo cp /usr/local/opt/nginx/*.plist /Library/LaunchDaemons
sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.nginx.plist

最后,重启你的机器,你会发现nginx在80端口启动了。

时间: 2024-09-29 15:51:23

OS X - 在80端口启动Nginx的相关文章

Mac OS X 绑定80端口,不装nginx的小技巧

Mac OS X 因为要绑定80端口需要ROOT权限, 但是如果用root权限启动eclipse或tomcat又会造成, 启动创建的各类文件是root的,普通用户无法删除. 为此, 我们可以通过pfctl做网络层的端口转发, 让连接到本机80端口的请求, 都转发到9090端口: (注意, Mac OS 会使用80端口做网络文件共享, 要先关闭掉) 修改/etc/pf.conf, 使用sudo vim /etc/pf.conf?pf.conf是对顺序强要求的, 所以注意添加的内容放的顺序 [jav

Linux tomcat 配置80端口启动不了情况的解决

配置tomcat为80端口,启动tomcat,发现tomcat无法启动,出现错误: LifecycleException:  Protocol handler initialization failed: java.net.BindException: Permission denied <null>:80 看打印出来的日志是权限不够,后来搜索发现Linux下,root权限才能启动1024以下端口的程序 临时解决办法:采用端口转发,对外开放80端口,通过80端口转发到内部的 tomcat 80

普通用户从非80端口启动tomcat,通过端口转发监听80端口

linux下小于1024的端口都需要root去绑定. root权限启动tomcat是不明智的,可以使用非root权限启动tomcat监听8080端口,然后利用端口转发实现对80端口的监听. 端口转发: # iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 -A PREROUTING 添加新规则-p 检查tcp协议--dport 80 指定目标端口-j REDIRECT 目标跳转--to-prot

SSH反向通道暴露内网主机80端口——作为Nginx的upstream后端

背景 微信开发的时候,需要提供一个已经备案的域名才能调用api.这里假设我的域名是domain.com,我把weixin.domain.com解释到一个公网IP.我的项目就部署到weixin.domain.com上面,微信接入的URL就是http://weixin.domain.com/gateway.php.现在有个问题,我的项目有一些bug,而又不是肉眼能看出来的,我需要debug.但是微信发送给公众账号的消息是发送到http://weixin.domain.com/gateway.php,

非root启动80端口

Linux非root用户如何使用80端口启动程序 默认情况下Linux的1024以下端口是只有root用户才有权限占用,我们的tomcat,apache,nginx等等程序如果想要用普通用户来占用80端口的话就会抛出java.net.BindException: Permission denied:80的异常. www.2cto.com 解决办法有两种: 1.使用非80端口启动程序,然后再用iptables做一个端口转发. iptables -t nat -A PREROUTING -p tcp

Mac OS X下绑定80端口

Mac OS X 因为要绑定80端口需要ROOT权限, 但是如果用root权限启动eclipse或tomcat又会造成, 启动创建的各类文件是root的,普通用户无法删除. 为此, 我们可以通过pfctl做网络层的端口转发, 让连接到本机80端口的请求, 都转发到9090端口: (注意, Mac OS 会使用80端口做网络文件共享, 要先关闭掉) 修改/etc/pf.conf, 使用sudo vim /etc/pf.conf pf.conf是对顺序强要求的, 所以注意添加的内容放的顺序 rdr-

nginx配置默认80端口默认server

直接访问ip地址80端口,nginx解析到对应服务器 需要配置server default 参数 server {         listen       80     default;         server_name  www.mysite.com;         access_log  logs/qb.app.access.log  main;         error_log  logs/qb.app.error.log  warn;    }

linux 安装与启动nginx

linux系统为Centos 64位 一.去http://nginx.org/download/上下载相应的版本下载nginx-1.8.0.tar.gz(注:还有更高版本的). 二.解压 tar -zxvf nginx-1.8.0.tar.gz 三.进入nginx-1.8.0/文件夹,设置一下配置信息 ./configure --prefix=/usr/local/nginx(安装后的文件存放路径). 四.配置的时候可能会出现类似这样的信息 ./configure: error: the HTT

Mac下如何进行端口转发,方便一系列需要使用80端口进行的调试工作

上篇文章介绍到,可以在本地hosts文件中添加一条记录将微信公众号中的可信域名解析道本地127.0.0.1,但tomcat在Mac下非root权限80端口是启动不了的,所以我们可以利用pfctl端口转发来将本地80端口上的请求转发到比如8080端口,从而实现通过80端口的访问. 注意:Mac OS 会使用80端口做网络文件共享, 需要先关闭掉. 一.修改/etc/pf.conf 先对pf.conf进行备份:cp /etc/pf.conf /etc/pf.conf.normal.bak , 之后在