当前位置: 首页 > news >正文

Nginx

Nginx

一、概述

1.1.nginx功能

  • Web 服务器:Nginx 可以直接处理客户端的 HTTP 请求,提供静态资源服务,如 HTML、CSS、JavaScript、图片等。它可以快速响应客户端的请求,减少用户等待时间。

  • 反向代理服务器:Nginx 可以作为反向代理服务器,接收客户端的请求,然后将请求转发到内部的服务器,并将服务器的响应返回给客户端。通过反向代理,用户可以隐藏内部服务器的真实 IP 地址,提高网站的安全性。

  • 负载均衡器:Nginx 可以通过多种算法将客户端的请求均匀地分配到多个后端服务器上,如轮询、IP 哈希、最少连接等。这样可以提高系统的可用性和性能,避免单个服务器因为负载过高而出现故障。

  • HTTP缓存:Nginx 可以对 HTTP 响应进行缓存,减少对后端服务器的请求,提高网站的响应速度。

  • 邮件代理服务器:Nginx 还可以作为电子邮件(IMAP/POP3)代理服务器,提供邮件转发和代理服务。它可以和邮件服务器集成,实现邮件的安全传输和管理。

1.2.nginx工作原理

nginx工作模式:单工作进程和多工作进程(默认)两种工作模式。

默认采用多进程工作模式,nginx启动后会运行一个master进程和多个worker进程。主进程负责读取和解析配置文件,管理工作进程,像启动、停止工作进程以及监控它们的状态等。工作进程则负责实际处理客户端的请求。

当客户端发起请求时,Nginx 会先接收连接,解析请求内容,明确请求的方法、URI 和 HTTP 版本等信息。在配置文件里查找匹配的 location 块,直接返回静态文件,或者将请求转发给后端服务器。处理完后,把响应返回给客户端。每个worker之间是平等的,共同竞争来处理来自客户端的请求。

1.3.master进程主要作用

  • **读取和解析配置文件:**Master 进程会在启动时读取 Nginx 的配置文件nginx.conf并对其进行解析。它会检查配置文件的语法是否正确,确保各项指令都符合 Nginx 的规范。

  • 应用配置更改:当你修改了 Nginx 的配置文件后,Master 进程可以在不中断服务的情况下应用新的配置。通过执行nginx -s reload命令,Master 进程会重新读取配置文件,并将新的配置信息传递给工作进程。

  • **监控工作进程:**Master 进程会持续监控工作进程的运行状态。如果某个工作进程因为异常情况(如内存泄漏、程序崩溃等)而终止,会重新启动新的worker进程。

  • **信号处理:**在接收到某些信号后,Master 进程会将信号传递给工作进程,让它们协同完成相应的操作。例如,在重新加载配置文件时,Master 进程会通知工作进程逐渐停止处理旧的请求,并开始按照新的配置处理新的请求。

二、安装

注意事项:nginx奇数版本是开发用的,偶数版本是稳定版

官网:https://nginx.org/

下载地址:https://nginx.org/download/

主机IP软件版本系统架构系统资源
192.168.200.16nginx-1.24.0.tar.gzRocky-Linux-8.1X862G/2Core

2.1.源码安装

#下载命令
wget https://nginx.org/download/nginx-1.24.0.tar.gz

#创建nginx用户(不创建家目录、不允许登录)
useradd -M -s /sbin/nologin nginx

#解压
tar -xf nginx-1.24.0.tar.gz -C /usr/local/

#安装素偶需要的依赖
yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel

#检查编译环境(确定Nginx的安装目录、运行用户和用户组,以及启用所需的模块。在执行完该命令后,会生成相应的Makefile文件)
cd /usr/local/nginx-1.24.0/

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module

#编译并安装
make && make install

#创建软连接(作用:可以不使用绝对路径执行命令)
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/

#启动用浏览器输入IP地址访问
nginx

#curl访问
curl -I  192.168.200.16

HTTP/1.1 200 OK
Server: nginx/1.24.0

2.2.常用命令

#启动命令
nginx 
#查看nginx的版本号
nginx -v
#查看nginx安装的模块
nginx -大V
#检查nginx的配置文件是否正确
nginx -t
#暴力停止nginx(不管当前是否有请求正在处理,会立即停止)
nginx -s stop
#优雅停止
nginx -s quit
#重载配置文件
nginx -s reload
#重新打开 Nginx 的日志文件,常用于日志轮转或更新日志文件的路径时
sudo nginx -s reopen

三、配置文件

Nginx的配置文件可以分为几个主要部分:

  1. 全局配置(Global Configuration)
  2. 事件配置(Events Block)
  3. http配置(HTTP Block)
  4. server配置(Server Block)
  5. location配置(Location Block)

3.1. 全局配置(Global Configuration)

全局配置块位于文件的最上方,通常设置 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;
  • nginx:指定 Nginx 执行命令,通常不需要修改。
  • worker_processes auto;:设置工作进程的数量,auto 表示自动根据 CPU 核心数来决定。通常设置为与 CPU 核心数一致,可以提高性能。
  • #error_log logs/error.log;:错误日志文件的路径。此行注释掉表示未启用日志文件。
  • #error_log logs/error.log notice;:定义日志级别为 notice,表示记录较少的重要信息。
  • #error_log logs/error.log info;:定义日志级别为 info,表示记录更多的调试和信息。
  • #pid logs/nginx.pid;:指定存放 Nginx 主进程 PID(进程 ID)的文件路径。此行注释掉表示未设置该路径。

3.2. 事件配置(Events Block)

该块用于配置与事件处理相关的设置,主要影响 Nginx 如何处理并发连接。

events {
    worker_connections  1024;  # 每个工作进程的最大连接数
    use epoll;               # 使用 epoll 模型(Linux 系统)
}
  • worker_connections 1024;:每个工作进程最大允许的连接数。1024 是默认值,表示每个进程最多处理 1024 个连接。
  • use epoll;:指定事件模型,epoll 是 Linux 上用于处理大量并发连接的高效事件驱动模型。

3.3. HTTP 配置(HTTP Block)

http 块包含了大多数关于 Web 服务的配置,诸如文件缓存、代理、SSL 等设置。

http {
    include       mime.types;  # 加载文件类型映射
    default_type  application/octet-stream;  # 默认 MIME 类型
    sendfile      on;          # 启用 sendfile(高效传输文件)
    keepalive_timeout  65;     # 设置保持连接的超时时间
    gzip on;                   # 启用 Gzip 压缩
    #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;
    #tcp_nopush     on;
}
  • include mime.types;:引入 mime.types 文件,进行文件类型的映射,如 .html 文件对应 text/html 类型。

  • default_type application/octet-stream;:默认的 MIME 类型,用于那些未在 mime.types 中定义的文件类型。

  • sendfile on;:启用零拷贝文件传输,使用操作系统的 sendfile 系统调用,提升文件传输性能。

  • keepalive_timeout 65;:设置客户端与服务器之间的空闲连接保持时间,单位为秒。65 秒表示保持连接 65 秒。

  • gzip on;:启用 HTTP 响应的 Gzip 压缩,减少传输的数据量,提升页面加载速度。

  • #log_format main …

    :定义访问日志的格式。每个字段表示访问日志中的不同信息:

    • $remote_addr:客户端的 IP 地址。
    • $remote_user:客户端的用户名(如果有的话)。
    • $time_local:请求发生的时间。
    • $request:客户端请求的详细信息(如请求方法、URL 等)。
    • $status:服务器的响应状态码。
    • $body_bytes_sent:发送给客户端的字节数。
    • $http_referer:请求来源的 URL。
    • $http_user_agent:客户端浏览器的信息。
    • $http_x_forwarded_for:客户端 IP(通过代理时传递的信息)。
  • #access_log logs/access.log main;:设置访问日志文件的位置和格式。main 是上面定义的日志格式。此行被注释掉,表示未启用访问日志记录。

  • #tcp_nopush on;:启用 TCP_NOPUSH 标志,用于合并多个小的 TCP 包,以提升性能。注释掉表示未启用该选项。

3.4. Server 配置块(用于 HTTP)

server {
    listen       80;  # 监听 80 端口(HTTP 协议默认端口)
    server_name  localhost;  # 绑定域名为 localhost
  • listen 80;:指定该虚拟主机监听的端口是 80,这是 HTTP 协议的默认端口。
  • server_name localhost;:指定该虚拟主机的域名为 localhost,即当请求的域名是 localhost 时,匹配该 server 块。
location / {
        root   html;  # 网站根目录为 html
        index  index.html index.htm;  # 默认首页为 index.html 或 index.htm
    }
  • location /:处理根路径的请求。
    • root html;:根目录设置为 html 文件夹,通常是 Nginx 配置文件所在目录下的 html 文件夹。
    • index index.html index.htm;:指定默认的首页文件。如果访问根路径 /,Nginx 会查找并返回 index.htmlindex.htm 文件。
error_page   500 502 503 504  /50x.html;  # 自定义 500、502、503、504 错误页面
    location = /50x.html {
        root   html;  # 错误页面文件位于 html 目录下
    }
  • error_page 500 502 503 504 /50x.html;:当发生 500、502、503 或 504 错误时,返回自定义的错误页面 /50x.html
  • location = /50x.html { root html; }:当访问 /50x.html 页面时,从 html/50x.html 文件加载错误页面。

3.5. 注释掉的部分

 #proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}
  • #proxy_pass http://127.0.0.1;:这段配置本来是用于将 .php 文件的请求代理到本地的 Apache 服务器。由于注释掉了,表示当前配置没有启用该代理。
#pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;  # 将 PHP 请求转发到 PHP-FPM
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}
  • #fastcgi_pass 127.0.0.1:9000;:这部分配置本来是将 .php 请求转发给 PHP-FPM(FastCGI)服务,通常监听在 9000 端口。由于被注释掉,表示当前没有启用 PHP 处理。
#deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;  # 禁止访问 .htaccess 文件
    #}
  • #deny all;:这部分配置用于禁止访问 .htaccess 文件。.htaccess 文件通常由 Apache 使用,但在 Nginx 中不支持,因此要确保不让外部访问这些敏感文件。

3.6. 注释掉的虚拟主机配置(使用不同端口和 IP)

#another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;  # 监听 8000 端口
    #    listen       somename:8080;  # 监听指定域名和端口
    #    server_name  somename  alias  another.alias;
    #
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
  • #server { … }:这部分配置展示了如何使用不同的 IP 地址、端口和域名来配置多个虚拟主机。这里被注释掉了,表示未启用这个虚拟主机。

3.7. 注释掉的 HTTPS 配置

 #HTTPS server
    #
    #server {
    #    listen       443 ssl;  # 启用 SSL 并监听 443 端口
    #    server_name  localhost;
    #
    #    ssl_certificate      cert.pem;  # SSL 证书
    #    ssl_certificate_key  cert.key;  # SSL 证书私钥
    #
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;
    #
    #    ssl_ciphers  HIGH:!aNULL:!MD5;  # SSL 加密套件
    #    ssl_prefer_server_ciphers  on;
    #
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
  • #listen 443 ssl;:启用 SSL 并监听 443 端口,这表示 Nginx 将提供 HTTPS 服务。此行被注释掉了,表示没有启用 HTTPS。

  • #ssl_certificate cert.pem;:指定 SSL 证书文件的路径,cert.pem 是证书文件的名称。

  • #ssl_certificate_key cert.key;:指定 SSL 证书的私钥文件路径。

  • #ssl_session_cache shared:SSL:1m;:设置 SSL 会话缓存,以提高性能。

  • #ssl_ciphers HIGH:!aNULL:!MD5;:指定使用的 SSL 加密套件。

  • #ssl_prefer_server_ciphers on;:启用服务器优先使用加密套件。

  • proxy_pass:将请求转发到另一台服务器。

  • rewrite:URL重写,可以用于301重定向、去除多余的斜杠等。

  • add_header:添加HTTP头部信息。

四、虚拟主机

美团有众多业务,每个业务可能有不同的域名,如外卖、酒店、旅游等业务分别有各自的域名。通过 Nginx 虚拟主机,可以在同一台服务器上配置多个server块,每个server块对应一个域名,监听相同或不同的端口,根据域名来分发请求,将用户的请求准确地路由到对应的业务应用服务器上。

示例:模拟使用2个不通域名域名相同端口对美团外卖和娱乐两个模块提供服务

waimai.meituan.com

yule.meituan.com

4.1.修改配置文件(添加多个虚拟主机)

vim /usr/local/nginx/conf/nginx.conf

# 定义用户和工作进程数量
user nginx;
worker_processes auto;

# 错误日志配置
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

# 事件模块配置
events {
    worker_connections 2048;
    use epoll;  # 适用于 Linux 系统,提高性能
}

# HTTP 模块配置
http {
    # 包含 MIME 类型配置文件
    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 /var/log/nginx/access.log main;

    # 开启高效文件传输模式
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    # 保持连接超时时间
    keepalive_timeout 65;

    # Gzip 压缩配置
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    # 虚拟主机配置:waimai.meituan.com
    server {
        listen 80;
        server_name waimai.meituan.com;

        # 字符编码设置
        charset utf-8;

        # 访问日志和错误日志配置
        access_log /var/log/nginx/waimai.meituan.com.access.log main;
        error_log /var/log/nginx/waimai.meituan.com.error.log;

        # 根目录和索引文件配置
        root /var/www/waimai.meituan.com;
        index index.html index.htm;

        # 错误页面配置
        error_page 404 /404.html;
        location = /404.html {
            internal;
        }

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

    # 虚拟主机配置:yule.meituan.com
    server {
        listen 80;
        server_name yule.meituan.com;

        # 字符编码设置
        charset utf-8;

        # 访问日志和错误日志配置
        access_log /var/log/nginx/yule.meituan.com.access.log main;
        error_log /var/log/nginx/yule.meituan.com.error.log;

        # 根目录和索引文件配置
        root /var/www/yule.meituan.com;
        index index.html index.htm;

        # 错误页面配置(相对路径)
        error_page 404 /404.html;
        location = /404.html {
            internal;
        }

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

4.2.创建所需文件

#创建网站根目录
mkdir -p /var/www/waimai.meituan.com
mkdir -p /var/www/yule.meituan.com

#创建网页
echo "<h1>Welcome to waimai.meituan.com</h1>" > /var/www/waimai.meituan.com/index.html

echo "<h1>Welcome to yule.meituan.com</h1>" > /var/www/yule.meituan.com/index.html
#创建日志存放目录
mkdir -p /var/log/nginx
#创建错误页面文件
echo "404 Not Found" > /var/www/waimai.meituan.com/404.html
echo "50x Server Error" > /var/www/waimai.meituan.com/50x.html

echo "404 Not Found" > /var/www/yule.meituan.com/404.html
echo "50x Server Error" > /var/www/yule.meituan.com/50x.html
#权限设置
chown -R nginx:nginx /var/www
chown -R nginx:nginx /var/log/nginx
#设置系统最大打开文件的数量(默认1024)
ulimit -n 4096

4.3.添加域名

[root@localhost conf]# cat /etc/hosts 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.16         waimai.meituan.com    #添加域名
192.168.200.16         yule.meituan.com      #添加域名

4.4.启动访问

nginx -t
nginx -s reload
[root@localhost conf]# curl waimai.meituan.com
<h1>Welcome to waimai.meituan.com</h1>

[root@localhost conf]# curl yule.meituan.com
<h1>Welcome to yule.meituan.com</h1>

五、负载均衡

主机IP软件版本系统架构系统资源
192.168.200.16nginx-1.24.0.tar.gzRocky-Linux-8.1X862G/2Core
192.168.200.17tomcatRocky-Linux-8.1X862G/2Core
192.168.200.18tomcatRocky-Linux-8.1X862G/2Core

5.1.安装Tomcat(主机17和18)

yum -y install tomcat

5.2.创建所需目录

mkdir -p /usr/share/tomcat/webapps/waimai
mkdir -p /usr/share/tomcat/webapps/yule

echo "<html><body><h1>Welcome to waimai!</h1></body></html>" > /usr/share/tomcat/webapps/waimai/index.jsp
echo "<html><body><h1>Welcome to Yule!</h1></body></html>" > /usr/share/tomcat/webapps/yule/index.jsp

5.3.修改配置文件

cd /usr/share/tomcat/conf
cp -a server.xml{,.bak}

vim server.xml

#添加两个hosts
<Host name="waimai.meituan.com" appBase="/usr/share/tomcat/webapps" unpackWARs="true" autoDeploy="true">
    <Context path="/" docBase="waimai" reloadable="true"/>
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="waimai_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

<Host name="yule.meituan.com" appBase="/usr/share/tomcat/webapps" unpackWARs="true" autoDeploy="true">
    <Context path="/" docBase="yule" reloadable="true"/>
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="yule_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
  • name=“waimai.meituan.com”
    • 指定虚拟主机的主机名,即访问时的域名。
    • 浏览器访问时,使用这个域名进行请求匹配。
  • appBase=“/usr/share/tomcat/webapps”
    • 指定 Web 应用程序的根目录,存放项目文件的路径。
    • 例如:/usr/share/tomcat/webapps/waimai
  • unpackWARs=“true”
    • 当部署一个 .war 文件时,是否自动解压缩为目录结构。
    • 如果为 false,则不会解压,直接使用压缩包。
  • autoDeploy=“true”
    • 当检测到部署目录中有新 .war 文件时,是否自动重新部署。
    • 优点: 便于热更新和自动部署。
    • 缺点: 生产环境可能导致短暂服务中断。

5.4.启动Tomcat访问

[root@localhost conf]# systemctl start tomcat
[root@localhost conf]# curl 192.168.200.17:8080/waimai/
<html><body><h1>Welcome to Waimai!</h1></body></html>

[root@localhost conf]# curl 192.168.200.17:8080/yule/
<html><body><h1>Welcome to Yule!</h1></body></html>

5.5.配置nginx

vim nginx.conf

user nginx;
worker_processes auto;
worker_cpu_affinity auto;

error_log /var/log/nginx/error.log warn;
error_log /var/log/nginx/error_critical.log crit;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
    multi_accept on;
    use epoll;
}

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"';
    log_format cache_log '$remote_addr - $remote_user [$time_local] '
                         '"$request" $status $body_bytes_sent '
                         '"$http_referer" "$http_user_agent" '
                         '"$http_x_forwarded_for" [cache_status:$upstream_cache_status]';

    access_log /var/log/nginx/access.log main;
    access_log /var/log/nginx/cache_access.log cache_log;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    keepalive_timeout 65;
    keepalive_requests 1000;

    gzip on;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_proxied any;
    gzip_vary on;

    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
    proxy_temp_path /var/tmp/nginx;

    # 外卖业务后端负载均衡组
    upstream waimai_backend {
        least_conn;
        server 192.168.200.17:8080 max_fails=3 fail_timeout=10s;
        server 192.168.200.18:8080 max_fails=3 fail_timeout=10s;
    }

    # 娱乐业务后端负载均衡组
    upstream yule_backend {
        least_conn;
        server 192.168.200.17:8080 max_fails=3 fail_timeout=10s;
        server 192.168.200.18:8080 max_fails=3 fail_timeout=10s;
    }

    # waimai.meituan.com 虚拟主机配置
    server {
        listen 80;
        server_name waimai.meituan.com;

        charset utf-8;

        access_log /var/log/nginx/waimai.meituan.com.access.log main;
        error_log /var/log/nginx/waimai.meituan.com.error.log;

        location / {
            proxy_pass http://waimai_backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_cache my_cache;
            proxy_cache_valid 200 302 60m;
            proxy_cache_valid 404 10m;
            add_header Nginx-Cache $upstream_cache_status;

            proxy_connect_timeout 10s;
            proxy_send_timeout 10s;
            proxy_read_timeout 10s;

            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        }

        error_page 404 /404.html;
        location = /404.html {
            internal;
        }

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

    # yule.meituan.com 虚拟主机配置
    server {
        listen 80;
        server_name yule.meituan.com;

        charset utf-8;

        access_log /var/log/nginx/yule.meituan.com.access.log main;
        error_log /var/log/nginx/yule.meituan.com.error.log;

        location / {
            proxy_pass http://yule_backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_cache my_cache;
            proxy_cache_valid 200 302 60m;
            proxy_cache_valid 404 10m;
            add_header Nginx-Cache $upstream_cache_status;

            proxy_connect_timeout 10s;
            proxy_send_timeout 10s;
            proxy_read_timeout 10s;

            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        }

        error_page 404 /404.html;
        location = /404.html {
            internal;
        }

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

user nginx;:指定 Nginx 工作进程运行的用户为 nginx,通过非 root 用户运行,降低安全风险。
worker_processes auto;:设置工作进程数量为 auto,Nginx 自动根据 CPU 核心数确定进程数,优化资源利用。
worker_cpu_affinity auto;:自动进行 CPU 亲和性设置,绑定工作进程到特定 CPU 核心,减少进程切换开销。
error_log /var/log/nginx/error.log warn;:定义错误日志路径为 /var/log/nginx/error.log,记录警告级别(warn)及以上错误信息。
error_log /var/log/nginx/error_critical.log crit;:单独记录严重级别(crit)错误到 /var/log/nginx/error_critical.log。
pid /var/run/nginx.pid;:指定 Nginx 主进程 PID 文件路径,用于进程管理(如启停、查看状态)。
events { … }:事件处理配置块,调整连接处理参数:
worker_connections 1024;:每个工作进程可同时处理的最大连接数。
multi_accept on;:允许工作进程一次性接收多个新连接,提升高并发处理效率。
use epoll;:使用 Linux 的 epoll 事件模型,高效处理并发连接。
http { … }:HTTP 服务核心配置块,包含全局及虚拟主机配置:
include mime.types;:引入 mime.types 文件,定义文件扩展名对应的 MIME 类型。
default_type application/octet-stream;:设置默认 MIME 类型为二进制流,处理未知类型文件。
log_format main …;:定义 main 日志格式,记录客户端 IP、请求时间、状态码等常规信息。
log_format cache_log …;:定义 cache_log 日志格式,额外记录缓存状态(如 HIT/MISS)。
access_log /var/log/nginx/access.log main;:按 main 格式记录常规访问日志。
access_log /var/log/nginx/cache_access.log cache_log;:按 cache_log 格式记录缓存相关日志。
sendfile on;:开启高效文件传输,减少内核与用户空间数据拷贝。
tcp_nopush on;:配合 sendfile,优化网络包发送,提升吞吐量。
tcp_nodelay on;:禁用 Nagle 算法,降低实时应用(如长连接)的传输延迟。
keepalive_timeout 65;:长连接超时时间为 65 秒,无活动则关闭连接。
keepalive_requests 1000;:单个长连接最多处理 1000 个请求,防止资源滥用。
gzip on;:开启 Gzip 压缩,减小响应数据体积。
gzip_comp_level 6;:设置压缩级别为 6,平衡压缩率与 CPU 消耗。
gzip_types text/plain …;:指定对文本、CSS、JSON 等 MIME 类型内容压缩。
gzip_proxied any;:对所有代理请求的响应也进行压缩。
gzip_vary on;:在响应头添加 Vary: Accept-Encoding,优化缓存策略。
proxy_cache_path /var/cache/nginx …;:配置代理缓存路径、大小、过期时间等,缓存代理响应。
proxy_temp_path /var/tmp/nginx;:设置代理临时文件存储路径,避免污染主缓存目录。
upstream waimai_backend { … }:定义后端服务器组(外卖业务),实现负载均衡:
least_conn;:采用最少连接数算法,分配请求到当前连接数最少的服务器。
server 192.168.200.17:8080 max_fails=3 fail_timeout=10s;:定义后端服务器地址,设置失败重试策略(10 秒内最多 3 次失败)。
server { … }:虚拟主机配置(以 waimai.meituan.com 为例):
listen 80;:监听 80 端口,接收 HTTP 请求。
server_name waimai.meituan.com;:绑定域名,识别对应虚拟主机请求。
charset utf-8;:设置响应字符编码为 UTF-8,支持多语言。
access_log /var/log/nginx/waimai.meituan.com.access.log main;:记录该虚拟主机的常规访问日志。
error_log /var/log/nginx/waimai.meituan.com.error.log;:记录该虚拟主机的错误日志。
location / { … }:匹配根路径请求的处理逻辑:
proxy_pass http://waimai_backend;:将请求代理到 waimai_backend 后端服务器组。
proxy_set_header Host $host;:传递客户端请求的 Host 头到后端。
proxy_set_header X-Real-IP $remote_addr;:传递客户端真实 IP 到后端。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;:记录客户端及代理服务器 IP 链到后端。
proxy_cache my_cache;:启用 my_cache 缓存区,缓存代理响应。
proxy_cache_valid 200 302 60m;:对 200、302 状态码响应缓存 60 分钟。
proxy_cache_valid 404 10m;:对 404 状态码响应缓存 10 分钟。
add_header Nginx-Cache $upstream_cache_status;:在响应头添加缓存状态信息。
proxy_connect_timeout 10s;:与后端建立连接的超时时间。
proxy_send_timeout 10s;:向后端发送请求数据的超时时间。
proxy_read_timeout 10s;:从后端读取响应数据的超时时间。
proxy_next_upstream error …;:定义切换后端服务器的条件(如错误、超时、5xx 状态码)。
error_page 404 /404.html;:定义 404 错误返回自定义页面。
location = /404.html { internal; }:限制 /404.html 仅内部访问,禁止外部直接请求。

5.6.添加域名解析并访问

[root@localhost conf]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.16         waimai.meituan.com
192.168.200.16         yule.meituan.com


[root@localhost conf]# curl http://waimai.meituan.com
<html><body><h1>Welcome to Waimai!</h1></body></html>
[root@localhost conf]# curl http://yule.meituan.com
<html><body><h1>Welcome to Yule!</h1></body></html>

相关文章:

  • ‌C# I/O 核心用法
  • 【408计算机网络-自顶向下-应用层】-简单描述概念PPT-中国科学技术大学-郑老师-计算机网络课程的深度复习资料
  • PostgreSQL 存储过程
  • manacher 算法详解
  • Vulnhub靶机:Web Machine(N7)
  • 外贸网络专线推荐——SD-WAN灵活且高效!
  • 蓝桥杯练习day3:反转字符串II
  • 从“制造”到“智造”,看中集“灯塔”生产线与永洪“数据技术”的紧密融合
  • CentOS 7.9 安装 Python 3.10 详细步骤及常见问题解决
  • FPGA 以太网通信(一)
  • java常用数据转换
  • 软件设计师笔记持续更新-看学以致知视频笔记
  • 中微单片机学习--SC8F072
  • 【蓝桥杯速成】| 8.回溯算法
  • C语言 第五章 指针(3)
  • 实用工具-Another Redis Desktop Manager介绍
  • electron桌面应用多种快速创建方法
  • 如何通过Odoo 18创建与配置服务器操作
  • 楼宇自控系统的结构密码:总线与分布式结构方式的差异与应用
  • Jackson 库进行 JSON 序列化时遇到了 ‌无限递归(Infinite Recursion)‌ 问题
  • 没有雷军的车展:老外扎堆,萌车、机器狗谁更抢镜?| 湃客Talk
  • 首映|《人生开门红》:段子背后都是案子
  • 一回合摘下“狮心”,张名扬霸气回应观众:再嘘一个我听听
  • 新城市志|中国消费第一城,迎来“补贴力度最大”购物节
  • 最高法知识产权法庭:6年来新收涉外案件年均增长23.2%
  • 明查|把太平洋垃圾污染问题甩锅中国,特朗普用的是P过的图