本文详细介绍了Nginx的安装、配置和使用方法,包括通过yum和源码两种方式安装Nginx,配置Nginx作为反向代理和负载均衡服务器,以及设置开机自启。通过本教程,读者将能够轻松搭建高性能的Web服务器,适用于各种Web应用和企业级项目。
Nginx概述
Nginx ("engine x") 是一个高性能、轻量级的 HTTP Web服务器 和反向代理服务器,特点是占有内存少,并发能力强。
Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php等,但是不支持 java。Java 程序只能通过与 tomcat 配合完成。Nginx 专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。
官网:nginx.org/
中文文档: www.nginx.cn/doc/
Nginx特点
Nginx官方提供了三个类型的版本:
Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版Stable version:最新稳定版,生产环境上建议使用的版本Legacy versions:遗留的老版本的稳定版
Nginx能做什么
Nginx能干的事情很多,这里简要罗列一-些:
- 可直接支持Rails和PHP的程序
- 可作为HTTP反向代理服务器
- 作为负载均衡服务器
- 作为邮件代理服务器
- 帮助实现前端动静分离
任务描述
1、Nginx服务器的下载
2、Nginx服务器安装
3、Nginx服务器配置
4、学会yum安装和源代码安装Nginx
任务实施
1、先卸载当前操作系统上已安装的nginx
yum list nginx
2、删除nginx安装包
yum -y remove nginx
3、重新安装nginx
yum install nginx
4、修改/etc/nginx/nginx.conf文件,加入红框内容(跳转到tomcat地址)
5、启动nginx
/usr/sbin/nginx -c /etc/nginx/nginx.conf
6、测试Nginx
curl localhost:端口
7、重启nginx
/usr/sbin/目录下执行
./nginx -s reload
8、停止nginx
/usr/sbin目录下执行
./nginx -s stop
实验实训
源码安装教程
1、下载nginx,并上传到服务器上
一、安装编译工具及库文件
yum install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel -y
二、解压nginx并编译安装
[root@localhost src]# cd /usr/src
[root@localhost src]# tar -zxvf nginx-1.16.1.tar.gz
[root@localhost src]# cd nginx-1.16.1
[root@localhost nginx-1.16.1]# ./configure --prefix=/usr/local/nginx
[root@localhost nginx-1.16.1]# make && make install
三、检查配置文件时否正确、查看版本
[root@localhost nginx-1.16.1]# /usr/local/nginx/sbin/nginx -t
[root@localhost nginx-1.16.1]# /usr/local/nginx/sbin/nginx -V
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
返回OK,successful,说明成功
查看nginx版本
四、至此编译安装已完成,启动Nginx
[root@localhost etc]# /usr/local/nginx/sbin/nginx #启动
[root@localhost etc]# /usr/local/nginx/sbin/nginx -s reload #重载
[root@localhost etc]# /usr/local/nginx/sbin/nginx -s stop #停止
[root@localhost nginx-1.16.1]# /usr/local/nginx/sbin/nginx #按下ENTER键运行nginx
ps -A | grep nginx 或 ps -ef | grep nginx #查看nginx是否运行
[root@localhost nginx-1.16.1]# /usr/local/nginx/sbin/nginx
[root@localhost nginx-1.16.1]# ps -A | grep nginx
6807 ? 00:00:00 nginx
6808 ? 00:00:00 nginx
[root@localhost nginx-1.16.1]# /usr/local/nginx/sbin/nginx
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
提示有问题80端口已被监听
解决办法: 先关闭nginx
配置软链接
sudo ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
现在就可以不用路径直接输入nginx启动。
五、内网映射端口配置
server
{
listen 80;
#listen [::]:80;
server_name cbitedu.budaos.com;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://127.0.0.1:8001;
}
access_log /usr/local/webserver/nginx/logs/demo.xx.com.log;
}
六、设置nginx开机自启
1、先创建开机自启脚本(nginx.service)
cd /etc/systemd/system
vim nginx.service
2、nginx.service文件内容
# 仅修改 /usr/local/nginx/sbin/nginx 这个路径即可(修改为你的nginx路径)
[Unit]
Description=nginx service
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
3、设置文件权限
chmod 755 nginx.service
4、设置开机自启动
systemctl enable nginx
5、先用此命令启停一下 看配置是否正常
systemctl start nginx # nginx启动
systemctl stop nginx # nginx停止
6、直接重启服务器即可(nginx就自动重启了)
优化
调整工作进程数和线程数
Nginx采用异步非阻塞的方式处理请求,这种方式可以充分利用CPU资源,提高并发处理能力。但是,过多的工作进程和线程会导致系统资源浪费,降低性能。因此,需要根据实际情况调整Nginx的工作进程数和线程数。
调整工作进程数
Nginx的工作进程数是指Nginx启动后生成的子进程数量。可以通过修改Nginx配置文件中的worker_processes参数来调整工作进程数。
例如:
worker_processes 4;
或
worker_processes auto;
表示将Nginx的工作进程数设置为4。
调整线程数
每个工作进程都有一个默认的线程数,即Nginx的事件处理模型中包含的线程数。可以通过修改Nginx配置文件中的worker_connections参数来调整线程数。
例如:
worker_connections 20240;
表示将每个工作进程的线程数设置为1024。
需要注意的是,线程数并不是越大越好,因为线程之间的竞争可能会导致性能下降。因此,需要根据实际情况进行调整。
启用Gzip压缩
Gzip压缩是一种常用的网页压缩技术,可以减少传输的数据量,提高页面加载速度。Nginx支持Gzip压缩功能,可以通过配置Nginx来实现。
安装Gzip模块
首先需要在编译Nginx时安装Gzip模块。在Linux系统中,可以使用以下命令安装:
./configure --with-http_gzip_static_module --with-http_gzip_module
make && make install
配置Gzip压缩
在Nginx配置文件中添加以下内容:
http {
...
gzip on; # 开启Gzip压缩功能
gzip_min_length 1k; # 设置最小压缩文件大小为1KB
gzip_buffers 4 16k; # 设置压缩缓冲区个数和大小
gzip_http_version 1.1; # 设置支持的HTTP协议版本为1.1
gzip_comp_level 2; # 设置压缩级别为2(速度与压缩率的平衡)
gzip_types text/plain application/x-javascript text/css application/xml; # 设置需要压缩的文件类型
...
}
配置缓存策略
缓存是提高网站性能的重要手段之一。Nginx提供了多种缓存策略,可以根据实际需求进行配置。以下是一些常见的缓存策略:
配置浏览器缓存时间
通过设置HTTP响应头中的Expires和Cache-Control字段,可以控制浏览器缓存的时间。
例如:
location ~* .(jpg|jpeg|gif|png|css|js)$ {
add_header Cache-Control "public, max-age=31536000"; # 设置静态资源的缓存时间为1年(单位:秒)
}
配置代理服务器缓存时间
如果Nginx作为反向代理服务器使用,可以通过设置proxy_cache_valid和proxy_cache_valid指令来控制代理服务器的缓存时间。
例如:
location / {
proxy_pass http://backend; # 将请求转发到后端服务器
proxy_cache mycache; # 启用缓存,命名为mycache
proxy_cache_valid 200 302 60m; # 设置缓存有效时间为60分钟(单位:秒)
proxy_cache_valid 404 1m; # 设置缓存有效时间为1分钟(单位:秒)
}
优化文件访问方式
在处理静态文件时,Nginx默认会将文件读取到内存中进行处理。这种方式在大文件或高并发情况下会导致内存消耗过大,影响性能。因此,可以采用优化文件访问方式来提高性能。以下是一些优化方法:
使用sendfile()函数发送文件数据
sendfile()函数可以直接将文件从磁盘读取并发送到网络,避免了数据在用户空间和内核空间之间的拷贝,提高了性能。可以通过在 Nginx 配置文件中添加以下内容来启用sendfile()函数:
http {
...
sendfile on; # 开启sendfile()函数支持功能(需要操作系统支持)
...
}
启用sendfile_max_chunk和tcp_nopush参数
通过设置sendfile_max_chunk和tcp_nopush参数,可以控制 Nginx 在发送文件时的最大分片大小和TCP_CORK选项。
例如:
http {
...
sendfile_max_chunk 1m; # 设置最大分片大小为1MB
tcp_nopush on; # 开启TCP_CORK选项
...
}
优化日志配置
日志是排查问题的重要手段,但是过多的日志会导致磁盘空间不足,影响系统性能。因此,需要对Nginx的日志进行优化。以下是一些优化方法:
调整日志级别
Nginx支持多种日志级别,如debug、info、notice、warn、error等。可以通过修改Nginx配置文件中的log_level参数来调整日志级别。
例如:
http {
...
log_level info; # 将日志级别设置为info
...
}
配置日志切割和压缩
为了减少日志占用的磁盘空间,可以配置日志切割和压缩功能。例如:
http {
...
access_log /var/log/nginx/access.log combined buffer=32k flush=1m; # 配置访问日志切割和压缩功能
error_log /var/log/nginx/error.log info; # 配置错误日志,并设置日志级别为info
...
}
其他优化建议
除了上述优化方法外,还有一些其他的优化建议:
使用CDN加速静态资源访问
CDN(Content Delivery Network)是一种内容分发网络,可以将静态资源缓存到离用户更近的节点上,提高访问速度。可以使用阿里云、腾讯云等云服务商提供的CDN服务。
使用HTTP/2协议提高传输效率
HTTP/2协议是一种新的HTTP协议,支持多路复用、头部压缩等功能,可以提高传输效率。需要在Nginx和客户端同时支持HTTP/2协议才能生效。可以通过修改Nginx配置文件中的listen指令来启用HTTP/2协议。例如:
server {
listen 443 ssl http2; # 启用HTTPS并启用HTTP/2协议支持功能(需要操作系统和SSL库支持)
...
}