从零开始学Nginx(二):安装配置Nginx
安装nginx
- 想要使用nginx的常用功能,必须确保系统安装gcc、pcre、zlib、openssl这四个库,以centos系统为例来进行安装
yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl spenssl-devel
- 直接从官网获取最新的下载源码包并解压
wget http://nginx.org/download/nginx-1.19.1.tat.gz
tar -zxvf nginx-1.19.1.tat.gz
- 进入nginx的源码目录,开始进行编译安装
cd nginx-1.19.1
./configure //默认安装部署后的根目录为/usr/local/nginx,可以通过--prefix命令自定义安装路径
make
make install
- nginx的命令行控制
/usr/local/nginx/sbin/nginx // 直接启动nginx
/usr/local/nginx/sbin/nginx -t //检查配置信息是否有误
/usr/local/nginx/sbin/nginx -V //显示版本信息以及编译阶段的信息
/usr/local/nginx/sbin/nginx -s stop //快速停止服务,等同于kill -s SIGTERM <nginx的master进程号>
/usr/local/nginx/sbin/nginx -s quit //优雅的停止服务,与快速停止服务时master进程直接跳出循环、终止进程不同,优雅地停止服务会关闭监听端口、停止连接,然后处理完当前地连接并退出进程,等同于kill -s SIGQUIT <nginx的master进程号>
/usr/local/nginx/sbin/nginx -s reload //重读配置并热生效
nginx使用一个master进程来管理多个worker进程,一般情况下,worker进程数量与服务器上CPU的核心数相同。master进程主要管理worker进程,而每一个worker进程都是真正的提供互联网服务,这种master-worker进程部署带来的好处有:
- mater进程唯一,只用于纯管理工作,为管理员提供包括启动、停止、平滑升级等命令行服务,通常root用户启动master进程,worker进程的权限小于master进程。当worker进程出现错误导致coredump时,master进程可以立刻启动新的worker进程继续服务,提升服务的健壮性
- 多个worker进程不但可以提高服务的健壮性,还可以充分利用先用的多核架构,实现微观上的多核并发处理。nginx的worker进程数设置为cpu核心数,使得不同进程处理并发请求时几乎没有同步锁的限制,worker进程通常不会进入睡眠状态,一个进程处理的请求数仅限于内存大小。因此,当worker数与cpu核心数相等时,进程间切换的代价最小。
简单地运行nginx
nginx的配置文件在安装目录下的conf/nginx.conf,通过修改这个配置文件,可以实现nginx的不同功能。
- 静态服务器
//修改nginx.conf文件,新增server块
server {
listen 8090;
server_name test;
location / {
root data/www;
index wwwindex.html;
}
location ~ \.(gif|jpg|png)$ {
root data/images;
}
}
reload配置文件
/usr/local/nginx/sbin/nginx -s reload
打开浏览器,在搜索框输入http://localhost:8090/
,如果nginx在虚拟机上运行,需要通过ifconfig
命令得到虚拟机的ip地址,用这个ip地址将localhost替换即可。
浏览器显示出如下页面即为请求成功
server配置中的第二个location块,当用户输入的uri存在图片格式,会到相应的文件夹data/images
中进行寻找并返回到客户端,若不存在,就会返回404错误。
2. 反向代理
前面说过nginx一个很广泛的用途是用作反向代理,下面通过修改nginx.conf设置一个简单的反向代理~
#负载均衡设置
upstream domain {
server localhost:8080;
server localhost:8081;
}
#代理服务器设置
server {
listen 8090;
server_name test;
location / {
proxy_pass http://domain; #负载均衡设置,请求会被均匀分配到8080和8081两个端口
proxy_set_header Host $host:$server_port;
}
}
#8080端口服务
server {
listen 8080;
server_name up1;
location / {
root data/up1;
index up1index.html;
}
}
#8081端口服务
server {
listen 8081;
server_name up2;
location / {
root data/up2;
index up2index.html;
}
}
reload配置文件
/usr/local/nginx/sbin/nginx -s reload
打开浏览器输入相应的uri,可以看到,发到8090端口的请求会被均匀打到8080和8081两个端口的服务上面,说明我们的配置生效了。