Nginx配置文件详解及常用功能配置(实用率90%)

一、Nginx的功能概述

Nginx主要功能包括高性能的HTTP和反向代理服务、负载均衡、动静分离处理、邮件代理服务等。以下详细探讨Nginx的主要功能:

1、静态内容服务

传输速度快:Nginx设计为一个高性能的HTTP服务器,能够快速传输静态文件,如HTML、图片和视频等。

简单高效:占用系统资源少,使其在处理高并发请求时表现出色。

2、反向代理与负载均衡

反向代理功能:Nginx可以将客户端请求转发到后端服务器,并将响应结果返回给客户端,从而对客户端隐藏后端服务器的详细信息。

负载均衡策略:支持多种负载均衡算法如轮询、权重、IP哈希等,能有效分散请求压力,提升网站服务的可用性和性能。

3、动静分离处理

动态内容处理:Nginx可以与PHP、Python等后端应用服务器集成,通过FastCGI等方式处理动态内容。

静态内容优化:对于静态文件,Nginx可以直接从其缓存中高效率地服务,减少后端应用服务器的压力。

4、邮件代理服务

邮件代理功能:除了Web服务外,Nginx还提供邮件代理服务,能够代理IMAP、POP3及SMTP协议的请求。

5、SSL/TLS支持

安全性增强:支持SSL/TLS协议,可为网站提供HTTPS服务,保障数据传输过程的安全性。URL重写与虚拟主机配置

URL重写能力:可以根据规则对URL进行修改、重定向,有助于网站优化和美化。

虚拟主机支持:允许在同一服务器上部署多个网站,并根据域名分发请求,节省资源且便于管理。

6、配置文件简洁明了

易于配置:Nginx的配置文件结构清晰,注释详细,便于理解和维护。热部署与灵活性

无缝升级:Nginx支持热部署,可以在不中断服务的情况下进行软件版本的升级。

扩展性高:模块化设计和开放的插件系统使得Nginx拥有很高的自定义和扩展能力。

二、配置文件详解

Nginx的配置文件是nginx.conf,不过可以在conf.d目录下添加多个不同名称的配置文件,同时生效。生产环境有多个域名需要代理出去时,常常在conf.d目录下配置各自域名的发布或代理信息。

nginx配置文件一般包括全局块,events块,http块等组成,一个http块可包含一个或多个server块,一个server块可以包含一个或多个location块

下面是nginx配置文件的结构图:

Nginx配置文件详解及常用功能配置(实用率90%)

以下是初始化安装的配置文件内容,将对配置文件各个模块进行详细解析

#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   html;
            index  index.html index.htm;
        }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}

1、全局块

全局块是配置影响Nginx全局的参数。

user nginx;
worker_processes  auto;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

主要参数说明:

user :指定nginx运行的用户和用户组,默认是nobody,一般会使用nginx

workker_processes :指定Nginx启动的工作进程数,建议设置为CPU核心数的两倍或设置为auto,由Nginx自行选择  。

error_log和pid一般使用默认就行,会自动将信息放置在安装时指定的位置

2、events块

设定Nginx的工作模式及连接上限

events {
    # 定义每个工作进程可以处理的最大连接数
    worker_connections  65535;
}

workker_connections :定义每个工作进程可以处理的最大连接数,根据服务器性能和并发需求进行适当调整。

3、http块

http块是整个配置文件的核心部分,大部分配置都在此处操作。http块可以嵌套多个server块,

包含HTTP相关的指令,如文件引入、MIME-Type定义、日志自定义、连接超时时间等。

可以嵌套多个server块,用于配置不同的虚拟主机。而server块也可以嵌套多个location块,用于配置不同的URL。

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile on;   # 开启高效传输模式
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

4、server块

一个server块代表一个虚拟主机,可以配置多个,用于支持多个域名或IP地址,端口。

一个server块可以包含多个location块。

server {
        listen       9080;
        server_name  www.liyb.com;

        location / {
            root   /opt/nginx/html;
            index  index.html index.htm;
        }

        error_page  404              /404.html;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

主要参数说明

listen:指定Nginx监听端口,可以指定任意端口,但不可以端口冲突。

server_name:指定虚拟主机的域名或IP 域名匹配的四种写法:

# 精确匹配
server_name http://www.liyb.com;
# 左侧匹配
server_name *.liyb.com;
#右侧通配
server_name www.liyb.*;
# 正则匹配
server_name ~^www\.liyb\.*$;

root : 指定静态资源目录位置,当用户访问www.liyb.com:9080时,实际访问的是/opt/nginx/html/index.html

error_page 404:指定 404 错误页面的位置

error_page   500 502 503 504 :指定50开头的错误页面的位置

location块

配置URL路径的指令,可以定义URL路径的匹配规则和处理方式,如反向代理、重定向等

location / {
    root   html;
    index  index.html index.htm;
}
location = /50x.html {
    root   html;
}

location配置有多种匹配规则= 精确匹配
~ 正则匹配,区分大小写
~* 正则匹配,不区分大小写
^~  匹配到就停止搜索

location配置实例

server {
        listen       80;
        server_name  www.liyb.com;
# 当访问www.liyb.com/web02时,会匹配上/usr/local/nginx/html/index.html
        location = /web02 {
            root   /usr/local/nginx/html;
            index  index.html index.htm;
        }
# 只有当访问www.liyb.com/web01时才会匹配到/usr/local/nignx/html/web01
        location = /web01 {
            root   /usr/local/nginx/html;
        }
# 当访问www.liyb.com/dog.jpg等路径时会匹配到/usr/local/nginx/html/dog.jpg 
        location ~ \.(jpeg|jpg|png)$ {
            root   /usr/local/nginx/html;
        }


}

三、常用功能配置示例

1、反向代理

反向代理配置主要通过proxy_pass指令实现,将请求转发到后端服务器

server {
    listen 8090;
    server_name www.liyb.com;

    location / {
        proxy_pass http://app;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
# 配置后端服务器组
upstream app {
    server 10.10.10.100:8090;
    server 10.10.10.101:8090;
}

2、负载均衡

负载均衡是将单个服务器负载均衡到多个服务器上,使得大量并发访问或数据流量分担到多个服务器上,从而减少用户的等待响应时间。

负载均衡通过配置upstream指令定义一组后端服务器,并通过反向代理将请求分发到这些服务器,一般会给服务器添加权重,加权轮询

upstream web {
    server 10.10.10.100 weight=1;
    server 10.10.10.101 weight=2;
    server 10.10.10.102 down;
}

server {
    listen 80;

    location / {
        proxy_pass http://web;
    }
}

3、配置https

一般公司都注册自己的域名,获取到相应的SSL证书和私钥即可快速配置

server {
    listen 443 ssl;
    server_name www.liyb.com;
 
    ssl_certificate /path/to/your_certificate.pem; # 证书文件路径
    ssl_certificate_key /path/to/your_private.key; # 私钥文件路径
   ssl_session_cache    shared:SSL:1m;
   ssl_session_timeout  5m;
ssl_ciphers  HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers  on; 
    location / {
        root html;
        index index.html index.htm;
    }
}

五、Nginx常用命令

# 重新加载,热重启
nginx -s reload  
# 关闭nginx
nginx -s stop 
# 优雅关闭,等待进程处理完后再关闭
nginx -s quit 
# 检查nginx配置
nginx -t 

# 如果做成了systemd服务,可以使用以下命令来操作nginx

# 重启
systemctl restart nginx

# 停止nginx
systemctl stop nginx

# 启动nginx
systemctl start nginx

# 重新加载nginx
systemctl reload nginx

其实nginx是个功能非常丰富的软件,后面文章再对nginx进一步详细讲解。

声明: 本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
中间件

Redis 6.0 访问控制列表ACL说明 

2024-12-19 22:07:00

网络

要为华为设备配置AAA认证,并启用SSH和HTTP服务,您可以按照这个步骤操作

2024-1-23 11:56:10

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索