本文介紹了如何在阿里雲服務器上從零開始搭建nginx服務器。阿里雲服務器(ECS)相信大家都不陌生,感興趣的同學可以到http://www.aliyun.com/product/ecs去購買,或到體驗館去體驗(半個月有效期)。至於如何注冊、管理ECS這里就不詳細介紹了。因為官方文檔已經寫的很清楚了。如果還不清楚,打咨詢電話詢問。
現在假設你已經擁有了阿里雲服務器,ip是139.128.33.11(假的,讀者需要換成自己的ip地址)。並且沒有選擇任何安裝包。現在ECS是完全空的,除了必須的Linux系統外,其他什么都沒有。還有一點,本文選擇的是Ubuntu Linux 14.04 64位版本。Linux比較節省內存,因為並沒有GUI部分,純控制台操作(看命令行頭疼的同學請繞道)。
本文只安裝nginx服務器,后面的文章會配置其他環節,如PHP、Java、MySQL等。
在安裝之前需要完成如下兩項工作。
- 找一個工具上傳文件(如nginx安裝包)
- 連接到服務器的Console上,以便執行命令
由於現在服務器還是空的,所以沒有ftp服務啟動,因此,只能用sftp,至於什么是sftp,如何用sftp(SSH File Transfer Protocol),自己到網上搜索。總之,sftp使用了SSH協議,默認端口號是22。用法和ftp類似。大多數ftp客戶端都支持sftp。誰便找一個支持sftp的工具即可。然后利用ECS的用戶名(root)和密碼連接sftp即可。
至於連接到服務器的Console上,找一個SSH客戶端即可。例如,我在Mac OS X上,直接執行sudo ssh 139.128.33.11即可。這時系統會要求輸入OS X管理員密碼,通過后會要求輸入ECS的root用戶密碼,如果輸入正確,就會進入ECS Console。並且輸入如下的歡迎信息。
Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-32-generic x86_64)
* Documentation: https://help.ubuntu.com/
Welcome to aliyun Elastic Compute Service!
這兩項工作都搞定后,需要按如下幾步進行操作。
PS:下面的所有的命令都是在ECS Console中執行的。
由於nginx的rewrite需要pcre library,所以首先需要在Linux上執行如下命令安裝pcre(下面的命令只針對Ubuntu Linux,其他Linux版本需要使用其他命令)。
apt-get install libpcre3 libpcre3-dev
第2步:下載和上傳nginx安裝包
我們可以通過apt-get安裝nginx,不過並不是最新的,對於有強迫症,一定要安裝最新版本的同學,可能apt-get並不適合,所以可以直接從官網下載nginx的最新源代碼包,安裝編譯后的版本即可。
讀者可以到 http://nginx.org/en/download.html 下載nginx的最新版。目前是1.9.3。
下載黑框中nginx的即可。
下載完后,利用sftp工具上傳到ECS上。如果沒有購買外掛硬盤,上傳到系統盤也可以。Linux送20GB系統盤。還剩下18GB左右,足夠做實驗了。
現在使用下面的命令解壓nginx安裝包
tar -xzf nginx-1.9.3.tar.gz
解壓后的目錄是nginx-1.9.3。現在進入該目錄。
第3步:安裝相應的library
由於編譯nginx要使用http_stub_status_module 和http_ssl_module,所以需要安裝zlib和OpenSSL。
使用下面的命令安裝zlib。
apt-get install zlib1g zlib1g.dev
使用下面的命令安裝OpenSSL。
apt-get install libssl-dev
第4步:使用OpenSSL源代碼
如果編譯時出錯,可能的原因是OpenSSL的問題,所以最穩妥的方式是將OpenSSL源代碼和nginx源代碼一同編譯。讀者可以到https://www.openssl.org/source 下載最新的OpenSSL源代碼。下載后,用sftp工具上傳到ECS上。然后使用tar解壓。假設解壓后的目錄為/usr/local/openssl。
第5步:隱藏nginx的版本
盡管這一步不是必須的,不過為了安全,在編譯nginx之前,通常會隱去nginx的版本,這樣也可以給攻擊者帶來一定的麻煩。
現在進入<nginx源代碼根目錄>/src/core,然后用vi打開nginx.h頭文件,修改前的代碼如下:
#ifndef _NGINX_H_INCLUDED_ #define _NGINX_H_INCLUDED_ #define nginx_version 1009003 #define NGINX_VERSION "1.9.3" #define NGINX_VER "nginx/" NGINX_VERSION #ifdef NGX_BUILD #define NGINX_VER_BUILD NGINX_VER " (" NGX_BUILD ")" #else #define NGINX_VER_BUILD NGINX_VER #endif #define NGINX_VAR "NGINX" #define NGX_OLDPID_EXT ".oldbin" #endif /* _NGINX_H_INCLUDED_ */
修改后的代碼如下:
#ifndef _NGINX_H_INCLUDED_ #define _NGINX_H_INCLUDED_ #define nginx_version 1009003 #define NGINX_VERSION "" #define NGINX_VER "super" NGINX_VERSION #ifdef NGX_BUILD #define NGINX_VER_BUILD NGINX_VER " (" NGX_BUILD ")" #else #define NGINX_VER_BUILD NGINX_VER #endif #define NGINX_VAR "super" #define NGX_OLDPID_EXT ".oldbin"
第6步:配置nginx
編譯Linux/OS X下的源代碼,基本都一個套路,先configure,然后make install。如果PATH沒有設置“.”,還需要使用“./configure”。
現在進入nginx源代碼根目錄,然后執行如下的命令
./configure --prefix=/mnt/disk1/nginx --with-http_stub_status_module --with-http_ssl_module --with-openssl=/usr/local/openssl
其中“/mnt/disk1/nginx”表示要安裝到的目標目錄。 “ /usr/local/openssl”是OpenSSL源代碼目錄。這樣nginx會和OpenSSL一同編譯。
第7步:編譯nginx
如果前幾步都沒問題,執行make install編譯安裝nginx。編譯好后,會將目標文件都放到/mnt/disk1/nginx目錄中。
第8步:檢查配置文件是否正確
進入/mnt/disk1/nginx/sbin目錄,然后執行nginx -t 如果輸入如下信息,表明配置文件是正確的(每次修改配置文件后,啟動nginx服務之前,最好都執行一下這個命令)。
nginx: the configuration file /mnt/disk1/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /mnt/disk1/nginx/conf/nginx.conf test is successful
第9步:啟動nginx服務
進入/mnt/disk1/nginx/sbin目錄,執行nginx命令即可啟動nginx服務。如果發現80端口已經被占用,可能是nginx服務已經啟動。執行pkill nginx即可殺掉nginx服務。可以使用ps -ef | grep nginx命令查看內存中是否還有nginx進程。
第10步:測試nginx服務
現在打開瀏覽器,在地址欄輸入http://139.128.33.11 如果輸出如下圖的信息,表明nginx已經配置成功。
現在隨便輸入一個path。如http://139.128.33.11/abcd 由於該路徑不存在,所以會輸出404錯誤,不過由於nginx版本已經隱去,所以只會看到如下圖的輸出信息。