Web服务器也称为www服务器,HTTP服务器,其主要功能是提供网上信息浏览服务.
Unix和linux平台下的常用web服务器有Apache,Nginx,Lighttpd,Tomcat等.使用最广泛的是Apache.
- Apache仍然是世界上应用最多的服务器.
- Tomcat是一个开放源代码.运行servlet和JSP Web应用软件的基于Java的Web应用软件容器.Tomcat Server是根据servlet和JSP规范运行的.它比绝大多数商业应用软件服务器要好用.但是Tomcat对静态文件,高并发的处理比较弱.
- Nginx是俄罗斯人伊戈尔·塞索耶夫编写的一款高性能的HTTP服务器和反向代理服务器.在高并发的情况下,Nginx是Apache服务器不错的替代品.它能够支持高达50000多个并发连接数的响应(实际生产环境中能支持2万到4万的并发连接数).而内存、CPU等系统资源消耗却非常低.运行非常稳定,成本低.配置文件简单.支持热部署.
安装前准备
编译Nginx的要求如下:
磁盘空间保证10M以上.
GCC编译器及相关工具:您必须保证您的系统中安装有GCC编译器,因为Nginx是C语言写的.另外您还必须安装Autoconf和Automake工具.它们用于自动创建功能完善的Makefile.当前大多数软件包都是用这一工具生成Makefile的.Nginx也不例外.
在CentOS系统下使用yum安装.
yum -y install gcc gcc-c++ autoconf automake
模块依赖性:
Nginx的一些模块需要其他第三方库的支持,例如gzip需要zlib库,rewrite模块需要pcre库,ssl功能需要openssl库等.
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel
下载
官方网站:该网站的以下三行内容提供了Nginx 0.6.x, 0.7.x, 0.8.x三个版本分支的源码包或windows二进制文件下载.
http://www.nginx.net/
其开源源码主要分为三种:
- 主线版本 “Mainline version”,也称为主干版或开发板,主线版本是最新版本,但不稳定
- 稳定版本 “Stable version”
- 历史版本 “Legacy version”
源码安装
Nginx在linux系统上的安装命令如下:
# wget http://nginx.org/download/nginx-1.14.2.tar.gz
tar -zxvf nginx-0.x.xx.tar.gz
cd nginx-0.x.xx
# ./configure
# make
# sudo make install
文件目录如下:
total 752
drwxr-xr-x 6 1001 1001 4096 Jan 12 20:41 auto
-rw-r--r-- 1 1001 1001 288742 Dec 4 22:52 CHANGES
-rw-r--r-- 1 1001 1001 440121 Dec 4 22:52 CHANGES.ru
drwxr-xr-x 2 1001 1001 4096 Jan 13 12:45 conf
-rwxr-xr-x 1 1001 1001 2502 Dec 4 22:52 configure
drwxr-xr-x 4 1001 1001 4096 Jan 12 20:41 contrib
drwxr-xr-x 2 1001 1001 4096 Jan 12 20:41 html
-rw-r--r-- 1 1001 1001 1397 Dec 4 22:52 LICENSE
drwxr-xr-x 2 1001 1001 4096 Jan 12 20:41 man
-rw-r--r-- 1 1001 1001 49 Dec 4 22:52 README
drwxr-xr-x 9 1001 1001 4096 Jan 12 20:41 src
与编译其他软件一样.我们需要使用此目录下的configure
脚本文件,进行一些编译安装的相关设置,changes
文件说明了该版本修改了哪些bug,新增了哪些功能等等.changes.ru
是俄语版.conf
文件夹下的文件是一些nginx配置文件的模板文件.编译安装时这些文件最终会被拷贝到安装目录中,html
目录中的文件是一些静态页面的模板文件,src
目录是源代码目录.man
目录是帮助文档目录,contrib
目录中的文件可以帮助我们在使用vim编辑nginx配置文件时提供语法高亮功能.
按照上面的操作,Nginx将被安装在/usr/local/nginx
目录下.您可以通过./configure -help
命令查看Nginx可选择的编译选项.
./configure \
--prefix=/usr \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/tmp/nginx/client/ \
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi \
--with-pcre
执行./configure --help
可以看见许多选项信息,使用--prefix
选项可以指定nginx编译安装的目录,除了一些常见的目录设置选项,你应该还会看到好多类似”–with-XXX_module” 或”without-XXX_module”的选项.Nginx是高度模块化的,每个模块就代表一个功能,而且刚才也提到过,只有编译安装的方式才能指定安装哪些模块.
可以理解为
“—-with-XXX_module”选项表示安装对应的模块,
“—-without-XXX_module”选项表示指明不安装对应的模块.
以上能够自主选择的为可选模块.除了这些可选模块,还有标准模块是不可以自主选择的.
./configure \
# Nginx安装路径,默认/usr/local/nginx
--prefix=/usr \
# nginx可执行文件安装路径.只能安装时指定,默认<prefix>/sbin/nginx
--sbin-path=/usr/sbin/nginx \
# 在没有给定-c选项下默认的nginx.conf的路径.默认<prefix>/conf/nginx.con
--conf-path=/etc/nginx/nginx.conf \
# 默认 <prefix>/logs/error.log
--error-log-path=/var/log/nginx/error.log \
# 默认 <prefix>/logs/access.log
--http-log-path=/var/log/nginx/access.log \
# 默认 <prefix>/logs/nginx.pid
--pid-path=/var/run/nginx/nginx.pid \
# nginx.lock文件的路径
--lock-path=/var/lock/nginx.lock \
# 在nginx.conf中没有指定user指令的情况下.默认的nginx使用的用户,默认nobody
--user=nginx \
# 在nginx.conf中没有指定user指令的情况下.默认的nginx使用的组,默认nobody
--group=nginx \
# 开启HTTP ssl模块,使nginx可以支持https请求,这个模块需要已经安装OPENSSL. debian系统上是libssl.
--with-http_ssl_module \
# 启用ngx_http_flv_module
--with-http_flv_module \
# 启用 "server status" 页
--with-http_stub_status_module \
# 启用 ngx_http_gzip_module 如果启用需要zlib库.
--with-http_gzip_static_module \
# 指定http客户端请求缓存文件存放目录的路径
--http-client-body-temp-path=/var/tmp/nginx/client/ \
# 指定http反向代理缓存文件存放目录的路径
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \
# 指定http FastCGI缓存文件存放目录的路径
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi \
# 指定PCRE库的源代码的路径
--with-pcre
使用yum源安装
找到对应的yum源
http://nginx.org/en/linux_packages.html
配置过程如下:
- 创建nginx的yum源文件
/etc/yum.repos.d/nginx.repo
,内容如下:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
- 安装
yum install -y nginx
nginx.conf文件vim高亮
# 进入源码包解压目录
cd nginx-x.xx/
# 将相应的语法文件拷贝到对应的目录中,
cp -r contrib/vim/* /usr/share/vim/vimfiles/
将nginx编译安装完之后查看文件目录结构如下:
total 20
drwxr-xr-x 2 root root 4096 Jan 17 20:26 conf
drwxr-xr-x 2 root root 4096 Jan 17 18:32 html
drwxr-xr-x 2 root root 4096 Jan 17 18:32 logs
drwxr-xr-x 2 root root 4096 Jan 17 18:32 modules
drwxr-xr-x 2 root root 4096 Jan 17 18:32 sbin
- conf 存放nginx的相关配置文件
- html目录是默认提供的web服务的”根目录”
- logs是日志存放目录
- modules存放了一些模块会用到的库
- sbin目录中存放了nginx的二进制文件,我们需要使用nginx的二进制文件来启动nginx
命令如下:
# 启动nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
通过yum源安装的nginx,对应的二进制执行文件会自动拷贝到/usr/sbin/文件夹下.而此目录默认已经加入到环境变量中,所以我们可以在任意目录直接执行”nginx”命令启动nginx
编译安装后,nginx相关配置文件存放在如下路径中
nginx安装路径/conf/
而通过yum安装的nginx,相关的配置文件存放在如下路径中
/etc/nginx
默认情况下 nginx.conf文件带有很多的注释,删除注释
sed -i '/^[[:space:]]*#/'d nginx.conf
删除完所有的注释之后剩余的部分如下:
worker_processes 1;
events{
worker_connections 1024;
}
http{
include mime.types;
default_type application/octet-stream;
sendfile on;
keeplive_timeout 65;
server{
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html{
root html;
}
}
}
先看一下基础语法:
http {
...
...
server {
...
...
location ... {
...
...
}
}
server {
...
...
}
}
从上述语法配置示例可以看出,上述示例可以分为几个逻辑部分:
- http部分 http模块
- server部分 server模块
- location部分 location模块
每个配置块用{}作为分界线.从缩进可以看出它们是有层级关系的,http中可以配置多个server,一个server中可以配置多个location,我们知道nginx最基础的功能就是提供http服务,所以跟http有关的公共配置,可以放置在http模块中.我们可以在一台nginx主机上同时提供多个web服务.
每一个server就代表一个http服务,我们可以同时配置多个server.以便同时提供多个http服务.
一个server中可以有多个location.location是什么意思呢?当我们访问一个网络上的资源的时候,都是通过url访问的,你可以把location当做url的一部分.此处.我们使用如下url作为示例:
https://www.liupeng.mobi/archives/1591'
上述的”/archives”就是一个location
举例说明一下:
当我们访问https://www.liupeng.mobi/的时候默认会访问到nginx服务器上的/usr/local/nginx/html/index.html文件.
之所以会这样是因为如下配置:
location / {
root html;
index index.html index.htm;
}
刚才说过location可以理解为url的一部分,当我们访问https://www.liupeng.mobi/
的时候,这个url的最后一个/
就是location /
中的/
.
这个location块中有两条配置指令,它们分别是root和index,
- root配置指令的意思是:当前location所对应的文档根目录是哪些,
root html
:代表当前location的文档根目录是html目录. - index配置指令的意思是:当没有指明任何资源时,默认访问的资源.
基础命令汇总
- 设置nginx命令的全局变量
# 1、创建/etc/profile.d/nginx.sh文件,以便写入环境变量配置。
# 2、在/etc/profile.d/nginx.sh文件中写入如下内容:
nginx_home=/srv/nginx
PATH=$nginx_home/sbin:$PATH
export PATH
也可以直接在/etc/profile
或者~/bashrc
文件中直接添加
nginx_home=/srv/nginx
export PATH=$nginx_home/sbin:$PATH
最后使其生效
# 3、使用如下命令重载刚才的配置
source /etc/profile
不加任何参数直接运行nginx
是启动nginx服务.
- -h : 帮助信息
- -v : 查看版本号
- -V : 查看当前编译信息
- -c : 指定使用哪个配置文件来启动nginx服务.
- -t 或者 -T : 可以测试nginx.conf配置文件是否存在语法错误. -T会将文件内容输出到屏幕上.
如果没有错误则会提示如下信息:
# nginx -t
nginx: the configuration file /srv/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /srv/nginx/conf/nginx.conf test is successful
- -s : 向正在运行的nginx主进程发送信号.信号的可用值有stop.quit.reopen,reload.
- 停止nginx
ps -ef | grep nginx
# 我们可以通过如下方式进行平滑重启.
kill -信号类型 `/usr/local/webserver/nginx/logs/nginx.pid`
#等价于
kill -信号类型 主进程号
# 1. 从容停止nginx
kill -quit nginx 主进程号
# 2. 快速停止nginx
kill -TERM nginx主进程号
kill -int nginx主进程号
# 3. 强制停止所有Nginx进程
pkill -9 nginx
# 4. 平滑重启 (先检查新配置, 可用重启,不可用依旧使用旧配置)
kill -HUP nginx主进程号
Nginx的信号控制
- TERM,INT 快速关闭
- QUIT 从容关闭
- HUP 平滑重启.重新加载配置文件
- USR1 重新打开日志文件,在切割文件时用处较大.
- USR2 平滑升级可执行程序.
- WINCH 从容关闭工作进程.
评论前必须登录!
注册