今天配置CentOS6.5下安裝Nginx + php7 + mysql5.7.15遇到了一些坑。本來家里的電腦在配置環境的時候沒有問題,拿去公司的電腦上就是到處報錯。不知道是不是人品問題。今晚在家重裝了一個centos,安裝之后進行了全部yum update。本來以為上午的問題可能是沒有更新軟件,圖樣圖森破。下面總結一下今晚對nginx部分的心得。
因為PCRE本來是用在nginx重寫rewrite的時候,解析正則的正則解析庫,所以在安裝nginx之前,默默的先裝上基本應用:
yum -y install gcc automake autoconf libtool gcc-c++ gd zlib zlib-devel openssl openssl-devel libxml2 libxml2-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libmcrypt libmcrypt-devel pcre pcre-devel
ok,現在下載並解壓:
wget http://nginx.org/download/nginx-1.10.1.tar.gz
tar zxvf nginx-1.10.1
cd nginx-1.10.1
./configure --prefix=/usr/local/nginx
通過find,知道了pcre默認安裝在/usr/local/nginx/auto/lib/pcre,那么,
./configure --prefix=/usr/local/nginx --with-pcre=/usr/local/nginx/auto/lib/pcre
接下來就是一輪報錯:
1.發生錯誤為:
make[2]: *** 沒有規則可以創建目標“distclean”。 停止。
網上看到的辦法一一做了嘗試:
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-openssl=/usr/include/openssl --user=www --group=www
2.發生錯誤為:
"conf/koi-win" 與"/usr/local/nginx/conf/koi-win" 為同一文件
據說這是因為防火牆的原因。我又關了防火牆重啟:
vi + /etc/sysconfig/iptables
#添加配置項
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
#重啟防火牆
service iptables restart
3.接着出現:
nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (2: No such file or directory)
#0: getpwnam("www") failed
喝喝。現在log不能打開,網上說,這是nginx已經運行,被執行啟動,這個不算致命錯誤;
然后就沒有了!!!
好吧我殺進程,總算不在運行了吧:
kill -9 nginx
4.再次make && make install ,親人,胡漢三我又回來了!
cp: `conf/koi-win’ and `/usr/local/nginx/conf/koi-win’ 為同一文件。
所以上面這一切都是在逗我咯?
好吧。仔細翻了一下,nginx/conf/koi-win,和/usr/local/nginx/conf/kol-win,終於在阿里雲上面找到了答案,路徑的問題嘛
./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/nginx.conf
終於在默念天靈靈地靈靈裝好系統行不行的誠懇禱告下,make && make install成功了。以下部分轉載自阿里雲,並經過實際測試:
接下來啟動nginx
#方法1 [root@unique nginx]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf #方法2 [root@unique nginx]# cd /usr/local/nginx/sbin [root@unique sbin]# ./nginx
停止nginx
#查詢nginx主進程號 ps -ef | grep nginx
#停止進程 kill -QUIT 主進程號(我的是27854)
#快速停止 kill -TERM 主進程號(我的是2993)
#強制停止 pkill -9 nginx
重啟nginx
[root@unique sbin]# /usr/local/nginx/sbin/nginx -s reload
這個時候如果出現nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed
想必是需要:
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
繼續
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
測試nginx
#測試端口 netstat –na|grep 80 #瀏覽器中測試 http://ip:80
做一個自定義的nginx啟動停止腳本
[root@unique sbin]# vi /etc/init.d/nginx
把下面的腳本復制進去然后保存
#! /bin/sh # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts the nginx web server PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DESC="nginx daemon" NAME=nginx DAEMON=/usr/local/nginx/sbin/$NAME CONFIGFILE=/usr/local/nginx/conf/$NAME.conf PIDFILE=/usr/local/nginx/logs/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME set -e [ -x "$DAEMON" ] || exit 0 do_start() { $DAEMON -c $CONFIGFILE || echo -n "nginx already running" } do_stop() { kill -INT `cat $PIDFILE` || echo -n "nginx not running" } do_reload() { kill -HUP `cat $PIDFILE` || echo -n "nginx can't reload" } case "$1" in start) echo -n "Starting $DESC: $NAME" do_start echo "." ;; stop) echo -n "Stopping $DESC: $NAME" do_stop echo "." ;; reload|graceful) echo -n "Reloading $DESC configuration..." do_reload echo "." ;; restart) echo -n "Restarting $DESC: $NAME" do_stop do_start echo "." ;; *) echo "Usage: $SCRIPTNAME {start|stop|reload|restart}" >&2 exit 3 ;; esac exit 0
給文件添加執行權限
[root@unique sbin]# chmod +x /etc/init.d/nginx
#然后可以通過 #/etc/init.d/nginx start 命令啟動nginx #/etc/init.d/nginx stop 命令停止nginx #/etc/init.d/nginx restart 命令重啟nginx #重啟nginx [root@unique init.d]# /etc/init.d/nginx restart Restarting nginx daemon: nginx.
擴展:配置開機啟動
如果需要開機啟動服務,保存好 /etc/init.d/nginx文件后,執行以下命令:
[root@unique init.d]#chkconfig --add ningx [root@unique init.d]#chkconfig --level nginx 2345 on
於是,我開始配置php和mysql,前方必然有坑。容我慢慢趟來……
