GCC(GNU Compiler Collection)可用来编译C语言程序。
yum install -y gcc
C++来编写Nginx HTTP模块,这时就需要用到G++编译器。
yum install -y gcc-c++
PCRE(Perl Compatible Regular Expressions,Perl兼容正则表达式)该库支持正则表达式。如果我们在配置文件nginx.conf里使用了正则表达式,那么在编译Nginx时就必须把PCRE库编译进Nginx,因为Nginx的HTTP模块要靠它来解析正则表达式。pcre-devel是使用PCRE做二次开发时所需要的开发库,包括头文件等,这也是编译Nginx所必须使用的。
yum install -y pcre pcre-devel
zlib库用于对HTTP包的内容做gzip格式的压缩,如果我们在nginx.conf里配置了gzip on,并指定对于某些类型(content-type)的HTTP响应使用gzip来进行压缩以减少网络传输量,那么,在编译时就必须把zlib编译进Nginx。同理,zlib是直接使用的库,zlib-devel是二次开发所需要的库。
yum install -y zlib zlib-devel
如果我们的服务器不只是要支持HTTP,还需要在更安全的SSL协议上传输HTTP,那么就需要拥有OpenSSL了。另外,如果我们想使用MD5、SHA1等散列函数,那么也需要安装它。
yum install -y openssl openssl-devel
objs该目录用于放置在configure命令执行后所生成的源文件及目录,以及make命令执行后生成的目标文件和最终连接成功的二进制文件。默认情况下,configure命令会将该目录命名为objs,并放在Nginx源代码目录下
该目录存放实际Nginx服务运行期间所需要的二进制文件、配置文件等。默认情况下,该目录为/usr/local/nginx。
日志文件通常会比较大,当研究Nginx的底层架构时,需要打开debug级别的日志,这个级别的日志非常详细,会导致日志文件的大小增长得极快,需要预先分配一个拥有更大磁盘空间的目录。
./configure
make
make install
直接指定启动二进制文件,会默认读取/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
直接运行/usr/local/nginx/sbin/nginx,可以启动nginx,访问nginx默认的端口80,可以看到nginx的主页:
经过上面的步骤,显然nginx是可以启动起来了,接下来在nginx.conf中配置一个端口监听端口,访问的时候直接转到百度去。直接在http
模块下加server
模块
然后重新加载配置文件./nginx -s reload
,然后访问http://192.168.101.41:8081
直接跳转到了百度
在上面新加的配置中,有一个server_name
看到配置的是localhost,现在改为baidu(百度)
然后从新加载后访问,发现依然跳转到了百度
接着再新加一个一样的server
,只是把server_name改为xinlang(新浪)proxy_pass改为新浪的官网地址,配置如下:
然后访问192.168.101.41:8081
发现依然跳转到了百度,其实这样nginx默认找第一个匹配到的端口。
为了证明这个猜想,将两个配置的位置调换,则访问到了新浪:
实际上这里可以指定匹配哪一个,就是在访问的header中加入一个host=name_server
显然如果都不匹配,就默认找第一个匹配到的监听端口