Ubuntu 從官方源安裝 Nginx
cd ~ wget http://nginx.org/keys/nginx_signing.key sudo apt-key add nginx_signing.key sudo nano /etc/apt/sources.list # 添加以下兩句 deb http://nginx.org/packages/ubuntu/ precise nginx deb-src http://nginx.org/packages/ubuntu/ precise nginx sudo apt-get update sudo apt-get install nginx
Ubuntu 從PPA源安裝 Nginx :
sudo add-apt-repository ppa:nginx/stable sudo apt-get update sudo apt-get install nginx
Ubuntu 從常規源安裝 Nginx :
sudo apt-get install nginx
編譯安裝Nginx
wget http://nginx.org/packages/mainline/ubuntu/pool/nginx/n/nginx/nginx_1.5.7-1~precise_i386.deb wget http://nginx.org/download/nginx-1.5.7.tar.gztar xzf nginx-1.5.7.tar.gzcd nginx-1.5.7
(注意:Nginx1.5.7是Mainline版而非Stable版)
為了方便開發和管理,我在根目錄下新建了一個png目錄,并且目錄所有者設置為當前用戶,nginx就編譯在/png/nginx/1.5.7下面:
sudo mkdir /pngsudo chown eechen:eechen /png
運行用戶我定義為png:png,所以我需要新建這樣一個用戶:
sudo addgroup png --systemsudo adduser png --system --disabled-login --ingroup png --no-create-home --home /nonexistent --gecos "png user" --shell /bin/false
(新建用戶的命令可以參考官方Deb包里的預安裝腳本DEBIAN/preinst)
編譯參數參考了Nginx官方提供的Deb包(nginx -V可見).
./configure /
--prefix=/png/nginx/1.5.7 /--sbin-path=/png/nginx/1.5.7/sbin/nginx /--conf-path=/png/nginx/1.5.7/conf/nginx.conf /--error-log-path=/png/nginx/1.5.7/var/log/error.log /--http-log-path=/png/nginx/1.5.7/var/log/access.log /--pid-path=/png/nginx/1.5.7/var/run/nginx.pid /--lock-path=/png/nginx/1.5.7/var/run/nginx.lock /--http-client-body-temp-path=/png/nginx/1.5.7/var/cache/client_temp /--http-proxy-temp-path=/png/nginx/1.5.7/var/cache/proxy_temp /--http-fastcgi-temp-path=/png/nginx/1.5.7/var/cache/fastcgi_temp /--http-uwsgi-temp-path=/png/nginx/1.5.7/var/cache/uwsgi_temp /--http-scgi-temp-path=/png/nginx/1.5.7/var/cache/scgi_temp /--user=png /--group=png /--with-http_ssl_module /--with-http_realip_module /--with-http_addition_module /--with-http_sub_module /--with-http_dav_module /--with-http_flv_module /--with-http_mp4_module /--with-http_gunzip_module /--with-http_gzip_static_module /--with-http_random_index_module /--with-http_secure_link_module /--with-http_stub_status_module /--with-mail /--with-mail_ssl_module /--with-file-aio /--with-ipv6
注意:這一步按錯誤提示安裝依賴的包,這時就是apt要發威的時候了,比如我的系統安裝了這些包:
sudo apt-get -y install /
build-essential /autoconf /libtool /libxml2 /libxml2-dev /openssl /libcurl4-openssl-dev /libbz2-1.0 /libbz2-dev /libjpeg-dev /libpng12-dev /libfreetype6 /libfreetype6-dev /libldap-2.4-2 /libldap2-dev /libmcrypt4 /libmcrypt-dev /libmysqlclient-dev /libxslt1.1 /libxslt1-dev /libxt-dev /libpcre3-dev
安裝好這些包后,下次編譯新版Nginx就不用再裝了,而且基本也滿足編譯PHP時configure的需求.
好了,configure成功后就可以編譯安裝了:
time make && make install
time主要用來查看本次編譯耗時.
編譯好后可以看看這個家伙的個頭:
du -sh /png/nginx/1.5.7/sbin/nginx
5.5M /png/nginx/1.5.7/sbin/nginx
環境簡單配置總結
減小Nginx編譯后的文件大小:
編輯源文件 nginx-1.5.7/auto/cc/gcc 去除Debug信息(注釋掉即可):
# debug # CFLAGS="$CFLAGS -g"
這樣編譯后的主程序大小則為700多K,和Nginx官方提供的Deb包程序大小相近.
另外configure時去掉一些不需要的模塊,編譯后的可執行文件會更小.
當然,我需要一個服務腳本用來管理Nginx,這時同樣可以借助官方Deb包里提供的服務腳本etc/init.d/nginx.
我把它放到/png/nginx/1.5.7/nginx,對開頭定義的幾個值(13到19行)進行稍加修改:
PATH=/sbin:/usr/sbin:/bin:/usr/binDESC=nginxNAME=nginxCONFFILE=/etc/nginx/nginx.confDAEMON=/usr/sbin/nginxPIDFILE=/var/run/$NAME.pidSCRIPTNAME=/etc/init.d/$NAME改為PATH=/sbin:/usr/sbin:/bin:/usr/binDESC=nginxNAME=nginxCONFFILE=/png/nginx/1.5.7/conf/nginx.confDAEMON=/png/nginx/1.5.7/sbin/nginxPIDFILE=/png/nginx/1.5.7/var/run/$NAME.pidSCRIPTNAME=/png/nginx/1.5.7/$NAME
啟動前先創建一個cache目錄,否則會提示出錯:
mkdir /png/nginx/1.5.7/var/cache
啟動Nginx:
sudo /png/nginx/1.5.7/nginx start
測試頁面:
curl -I `hostname`
看一下端口:
sudo netstat -antp|grep nginx
查看一下它占用的內存:
htop按F4過濾nginx
用top同樣能看到類似內容:
top -b -n1|head -n7 && top -b -n1|grep nginx
主要看RES這個值,常駐內存(resident),不包括SWAP空間的物理內存, 單位為KB,%MEM就是以RES為參照對象.
可以看到Nginx兩個進程占用的物理內存加起來不到2M,內存占用非常小.
另外top里的RES這個值對應ps aux里的RSS這個值:
ps aux|head -n1 && ps aux|grep nginx
還有我們可以看到Nginx的工人進程只有一個線程:
cat /proc/25047/status|grep Threads
Threads: 1
其中25047是Nginx工人進程PID號.
把Nginx做成系統服務,開機自啟動:
sudo ln -s /png/nginx/1.5.7/nginx /etc/init.d/png-nginxsudo update-rc.d png-nginx defaults #開機自啟動 sudo update-rc.d -f png-nginx remove # 以后不想開機自啟動可以這樣禁止sudo service png-nginx reload #這樣就可以用service來管理Nginx服務了,比如重載配置
最后,Nginx的主配置文件位于/png/nginx/1.5.7/conf/nginx.conf,自己按需配置.
新聞熱點
疑難解答