在阿里云服务器(ECS)上从零开始搭建nginx服务器

LiuXi菟 7年前
   <p style="text-align:center"><img src="https://simg.open-open.com/show/9c0c77436cbd5dd6d75e542b0949b08a.jpg"></p>    <p>本文介绍了如何在阿里云服务器上从零开始搭建nginx服务器。阿里云服务器(ECS)相信大家都不陌生,或到体验馆去体验(半个月有效期)。至于如何注册、管理ECS这里就不详细介绍了。因为官方文档已经写的很清楚了。如果还不清楚,打咨询电话询问。</p>    <p>现在假设你已经拥有了阿里云服务器,ip是139.128.33.11(假的,读者需要换成自己的ip地址)。并且没有选择任何安装包。现在ECS是完全空的,除了必须的Linux系统外,其他什么都没有。还有一点,本文选择的是Ubuntu Linux14.04 64位版本。Linux比较节省内存,因为并没有GUI部分,纯控制台操作(看命令行头疼的同学请绕道)。</p>    <p>本文只安装nginx服务器,后面的文章会配置其他环节,如PHP、Java、MySQL等。</p>    <p>在安装之前需要完成如下两项工作。</p>    <p>1. 找一个工具上传文件(如nginx安装包)</p>    <p>2. 连接到服务器的Console上,以便执行命令</p>    <p>由于现在服务器还是空的,所以没有ftp服务启动,因此,只能用sftp,至于什么是sftp,如何用sftp(SSH File Transfer Protocol),自己到网上搜索。总之,sftp使用了SSH协议,默认端口号是22。用法和ftp类似。大多数ftp客户端都支持sftp。谁便找一个支持sftp的工具即可。然后利用ECS的用户名(root)和密码连接sftp即可。</p>    <p>至于连接到服务器的Console上,找一个SSH客户端即可。例如,我在Mac OS X上,直接执行sudossh139.128.33.11即可。这时系统会要求输入OS X管理员密码,通过后会要求输入ECS的root用户密码,如果输入正确,就会进入ECS Console。并且输入如下的欢迎信息。</p>    <p>Welcome toUbuntu 14.04.2 LTS (GNU/Linux 3.13.0-32-generic x86_64)</p>    <p>*Documentation: https://help.ubuntu.com/</p>    <p>Welcome toaliyun Elastic Compute Service!</p>    <p>这两项工作都搞定后,需要按如下几步进行操作。</p>    <p>PS:下面的所有的命令都是在ECS Console中执行的。</p>    <h3><strong>第1步:安装pcre</strong></h3>    <p>由于nginx的rewrite需要pcre library,所以首先需要在Linux上执行如下命令安装pcre(下面的命令只针对Ubuntu Linux,其他Linux版本需要使用其他命令)。</p>    <pre>  <code class="language-cpp">apt-getinstall libpcre3 libpcre3-dev   </code></pre>    <h3><strong>第2步:下载和上传nginx安装包</strong></h3>    <p>我们可以通过apt-get安装nginx,不过并不是最新的,对于有强迫症,一定要安装最新版本的同学,可能apt-get并不适合,所以可以直接从官网下载nginx的最新源代码包,安装编译后的版本即可。</p>    <p>下载黑框中nginx的即可。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/309f9a14671937ca10638922c42750e9.jpg"></p>    <p>下载完后,利用sftp工具上传到ECS上。如果没有购买外挂硬盘,上传到系统盘也可以。Linux送20GB系统盘。还剩下18GB左右,足够做实验了。</p>    <p>现在使用下面的命令解压nginx安装包</p>    <pre>  <code class="language-cpp">tar -xzf nginx-1.9.3.tar.gz   </code></pre>    <p>解压后的目录是nginx-1.9.3。现在进入该目录。</p>    <h3>第3步:安装相应的library</h3>    <p>由于编译nginx要使用http_stub_status_module和http_ssl_module,所以需要安装zlib和OpenSSL。</p>    <p>使用下面的命令安装zlib。</p>    <pre>  <code class="language-cpp">apt-get install zlib1g zlib1g.dev   </code></pre>    <p>使用下面的命令安装OpenSSL。</p>    <pre>  <code class="language-cpp">apt-get install libssl-dev   </code></pre>    <h3><strong>第4步:使用OpenSSL源代码</strong></h3>    <p>如果编译时出错,可能的原因是OpenSSL的问题,所以最稳妥的方式是将OpenSSL源代码和nginx源代码一同编译。</p>    <h3><strong>第5步:隐藏nginx的版本</strong></h3>    <p>尽管这一步不是必须的,不过为了安全,在编译nginx之前,通常会隐去nginx的版本,这样也可以给攻击者带来一定的麻烦。</p>    <p>现在进入<nginx源代码根目录>/src/core,然后用vi打开nginx.h头文件,修改前的代码如下:</p>    <pre>  <code class="language-cpp">#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_   </code></pre>    <p>修改后的代码如下:</p>    <pre>  <code class="language-cpp">#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"   </code></pre>    <h3><strong>第6步:配置nginx</strong></h3>    <p>编译Linux/OS X下的源代码,基本都一个套路,先configure,然后make install。如果PATH没有设置“.”,还需要使用“./configure”。</p>    <p>现在进入nginx源代码根目录,然后执行如下的命令</p>    <pre>  <code class="language-cpp">./configure --prefix=/mnt/disk1/nginx--with-http_stub_status_module --with-http_ssl_module --with-openssl=/usr/local/openssl   </code></pre>    <p>其中“/mnt/disk1/nginx”表示要安装到的目标目录。 “ /usr/local/openssl”是OpenSSL源代码目录。这样nginx会和OpenSSL一同编译。</p>    <h3><strong>第7步:编译nginx</strong></h3>    <p>如果前几步都没问题,执行make install编译安装nginx。编译好后,会将目标文件都放到/mnt/disk1/nginx目录中。</p>    <h3><strong>第8步:检查配置文件是否正确</strong></h3>    <p>进入/mnt/disk1/nginx/sbin目录,然后执行nginx -t 如果输入如下信息,表明配置文件是正确的(每次修改配置文件后,启动nginx服务之前,最好都执行一下这个命令)。</p>    <pre>  <code class="language-cpp">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   </code></pre>    <h3><strong>第9步:启动nginx服务</strong></h3>    <p>进入/mnt/disk1/nginx/sbin目录,执行nginx命令即可启动nginx服务。如果发现80端口已经被占用,可能是nginx服务已经启动。执行pkill nginx即可杀掉nginx服务。可以使用ps -ef | grep nginx命令查看内存中是否还有nginx进程。</p>    <h3><strong>第10步:测试nginx服务</strong></h3>    <p>现在打开浏览器,在地址栏输入http://139.128.33.11 如果输出如下图的信息,表明nginx已经配置成功。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/8fbe5014dc274ef03c9f355993035600.jpg"></p>    <p>现在随便输入一个path。如http://139.128.33.11/abcd 由于该路径不存在,所以会输出404错误,不过由于nginx版本已经隐去,所以只会看到如下图的输出信息。</p>    <p> </p>    <p>来自:http://zhuanlan.51cto.com/art/201610/519054.htm</p>    <p> </p>