第27章 Linux之Nginx入门与实战:从安装、配置到优化

1,286 阅读6分钟

本文详细介绍了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/

image.png 中文文档: www.nginx.cn/doc/

Nginx特点

Nginx官方提供了三个类型的版本:

Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版Stable version:最新稳定版,生产环境上建议使用的版本Legacy versions:遗留的老版本的稳定版

Nginx能做什么

Nginx能干的事情很多,这里简要罗列一-些:

  1. 可直接支持Rails和PHP的程序
  2. 可作为HTTP反向代理服务器
  3. 作为负载均衡服务器
  4. 作为邮件代理服务器
  5. 帮助实现前端动静分离

任务描述

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响应头中的ExpiresCache-Control字段,可以控制浏览器缓存的时间。

例如:

location ~* .(jpg|jpeg|gif|png|css|js){
    add_header Cache-Control "public, max-age=31536000"# 设置静态资源的缓存时间为1年(单位:秒)
}

配置代理服务器缓存时间

如果Nginx作为反向代理服务器使用,可以通过设置proxy_cache_validproxy_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_chunktcp_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=32flush=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库支持)
    ...
}