本文介绍了如何在阿里云服务器上从零开始搭建nginx服务器。阿里云服务器(ECS)相信你们都不陌生,感兴趣的同窗能够到http://www.aliyun.com/product/ecs去购买,或到体验馆去体验(半个月有效期)。至于如何注册、管理ECS这里就不详细介绍了。由于官方文档已经写的很清楚了。若是还不清楚,打咨询电话询问。html
如今假设你已经拥有了阿里云服务器,ip是139.128.33.11(假的,读者须要换成本身的ip地址)。而且没有选择任何安装包。如今ECS是彻底空的,除了必须的Linux系统外,其余什么都没有。还有一点,本文选择的是Ubuntu Linux 14.04 64位版本。Linux比较节省内存,由于并无GUI部分,纯控制台操做(看命令行头疼的同窗请绕道)。nginx
本文只安装nginx服务器,后面的文章会配置其余环节,如PHP、Java、MySQL等。ubuntu
在安装以前须要完成以下两项工做。浏览器
因为如今服务器仍是空的,因此没有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)ssh
* 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版本已经隐去,因此只会看到以下图的输出信息。