1、使用nginx必备软件

1、GCC编译器

GCC(GNU Compiler Collection)可用来编译C语言程序。

yum install -y gcc

C++来编写Nginx HTTP模块,这时就需要用到G++编译器。

yum install -y gcc-c++

2、PCRE库

PCRE(Perl Compatible Regular Expressions,Perl兼容正则表达式)该库支持正则表达式。如果我们在配置文件nginx.conf里使用了正则表达式,那么在编译Nginx时就必须把PCRE库编译进Nginx,因为Nginx的HTTP模块要靠它来解析正则表达式。pcre-devel是使用PCRE做二次开发时所需要的开发库,包括头文件等,这也是编译Nginx所必须使用的。

yum install -y pcre pcre-devel

3、zlib库

zlib库用于对HTTP包的内容做gzip格式的压缩,如果我们在nginx.conf里配置了gzip on,并指定对于某些类型(content-type)的HTTP响应使用gzip来进行压缩以减少网络传输量,那么,在编译时就必须把zlib编译进Nginx。同理,zlib是直接使用的库,zlib-devel是二次开发所需要的库。

yum install -y zlib zlib-devel

4、OpenSSL开发库

如果我们的服务器不只是要支持HTTP,还需要在更安全的SSL协议上传输HTTP,那么就需要拥有OpenSSL了。另外,如果我们想使用MD5、SHA1等散列函数,那么也需要安装它。

yum install -y openssl openssl-devel

2、安装nginx

1、编译的中间文件目录

objs该目录用于放置在configure命令执行后所生成的源文件及目录,以及make命令执行后生成的目标文件和最终连接成功的二进制文件。默认情况下,configure命令会将该目录命名为objs,并放在Nginx源代码目录下

2、部署目录

该目录存放实际Nginx服务运行期间所需要的二进制文件、配置文件等。默认情况下,该目录为/usr/local/nginx。

3、日志文件存放目录

日志文件通常会比较大,当研究Nginx的底层架构时,需要打开debug级别的日志,这个级别的日志非常详细,会导致日志文件的大小增长得极快,需要预先分配一个拥有更大磁盘空间的目录

4、开始安装

./configure
make
make install

5、nginx的命令行控制

直接指定启动二进制文件,会默认读取/usr/local/nginx/conf/nginx.conf文件

/usr/local/nginx/sbin/nginx

使用 -c 指定配置文件启动

/usr/local/nginx/sbin/nginx -c /tmp/nginx.conf

使用 -p 参数指定Nginx的安装目录

/usr/local/nginx/sbin/nginx -p /usr/local/nginx/

另行指定全局配置项的启动方式

/usr/local/nginx/sbin/nginx -g 'pid /var/nginx/test.pid'

上面这行命令意味着会把pid文件写到/var/nginx/test.pid中。
-g参数的约束条件是指定的配置项不能与默认路径下的nginx.conf中的配置项相冲突,否则无法启动。就像上例那样,类似这样的配置项:pid logs/nginx.pid,是不能存在于默认的nginx.conf中的。
另一个约束条件是,以-g方式启动的Nginx服务执行其他命令行时,需要把-g参数也带上,否则可能出现配置项不匹配的情形。例如,如果要停止Nginx服务,那么需要执行下面代码:

/usr/local/nginx/sbin/nginx -g 'pid /var/nginx/test.pid' -s stop

使用 -t 测试配置信息是否有错误

/usr/local/nginx/sbin/nginx -t

使用 -t -q 使用-q参数可以不把error级别以下的信息输出到屏幕。

/usr/local/nginx/sbin/nginx -t -q

使用 -v 参数显示版本

/usr/local/nginx/sbin/nginx -v

使用 -s 停止nginx

/usr/local/nginx/sbin/nginx -s stop

优雅的停止

/usr/local/nginx/sbin/nginx -s quit

重新加载配置文件

/usr/local/nginx/sbin/nginx -s reload

日志文件回滚,使用-s reopen参数可以重新打开日志文件,这样可以先把当前日志文件改名或转移到其他目录中进行备份,再重新打开时就会生成新的日志文件。这个功能使得日志文件不至于过大。

/usr/local/nginx/sbin/nginx -s reopen

3、配置内容

1、配置初步体验

直接运行/usr/local/nginx/sbin/nginx,可以启动nginx,访问nginx默认的端口80,可以看到nginx的主页:

nginx objs nginx objs目录_Nginx

经过上面的步骤,显然nginx是可以启动起来了,接下来在nginx.conf中配置一个端口监听端口,访问的时候直接转到百度去。直接在http模块下加server模块

nginx objs nginx objs目录_nginx_02


然后重新加载配置文件./nginx -s reload,然后访问http://192.168.101.41:8081直接跳转到了百度

2、关于server_name

在上面新加的配置中,有一个server_name

nginx objs nginx objs目录_nginx objs_03


看到配置的是localhost,现在改为baidu(百度)

nginx objs nginx objs目录_nginx_04


然后从新加载后访问,发现依然跳转到了百度

接着再新加一个一样的server,只是把server_name改为xinlang(新浪)proxy_pass改为新浪的官网地址,配置如下:

nginx objs nginx objs目录_nginx_05


然后访问192.168.101.41:8081发现依然跳转到了百度,其实这样nginx默认找第一个匹配到的端口。

为了证明这个猜想,将两个配置的位置调换,则访问到了新浪:

nginx objs nginx objs目录_nginx objs_06


实际上这里可以指定匹配哪一个,就是在访问的header中加入一个host=name_server

nginx objs nginx objs目录_nginx objs_07


nginx objs nginx objs目录_nginx objs_08


显然如果都不匹配,就默认找第一个匹配到的监听端口