方法一: 依次執行如下命令
cd /usr/local/nginx/sbin/ chown root nginx chmod u+s nginx
優點是,方便簡單,缺點是,既然sudo權限都不給了。這個set uid 最后也是讓nginx運行在root權限下。 ps -ef |grep nginx 查看的時候,nginx的主進程是運行在root下的。 雖然是可以讓普通用戶運行nginx服務,但是不是所有nginx進程都在用戶本身下運行
方法二:iptables端口轉發
使用非80端口啟動程序,然后再用iptables做一個端口轉發。
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 #用root用戶直接去執行就可以了! ( sysctl -w net.ipv4.ip_forward=1 iptables -F -t nat #清空nat表 iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to:8088 )
優點:可以用第三方用戶直接啟動,nginx的主進程就是用戶本身來啟動的。缺點,額外增加開銷,負載低的情況可以,負載高了 就不太好了
方案三:賦予nginx監聽80端口的能力
nginx內核 超過2.1版本以后 出現了能力的說法
我們可以給/usr/local/nginx/sbin/nginx 賦予監聽80端口的權限能力
setcap cap_net_bind_service =+ep /usr/local/nginx/sbin/nginx
這樣就可以直接用普通用戶啟用nginx了。並且可以在高負載的情況下,減少由於端口轉發部分的負載開銷。