nginx常用

本文详细介绍了Nginx的常用管理命令,如关闭、重新加载配置、日志管理等,以及源码安装过程。此外,还讲解了如何配置和检查Nginx语法,以及查看版本信息。在工具部分,提到了VSCode的Nginx插件和在线配置工具。最后,重点讨论了Nginx的反向代理配置和多种负载均衡策略,包括加权轮询、hash、urlhash和最小连接。
摘要由CSDN通过智能技术生成

nginx简介

nginx是一个web服务器,知名的衍生版还有:OpenResty,tengine


Centos7安装openresty

也适用于rhel8
参考官方文档:https://openresty.org/cn/linux-packages.html#rhel

# 下载openresty的yum源
curl -o /etc/yum.repos.d/openresty.repo https://openresty.org/package/rhel/openresty.repo

# yum安装openresty
yum install -y openresty

# 将openresty配置文件目录软链接到/etc/nginx
ln -snf /usr/local/openresty/nginx/ /etc/nginx

# 开机自启动并现在启动服务
systemctl enable --now openresty.service

openresty实际上是nginx的软链接
参考:https://tinychen.com/20210317-openresty-01-introduction-and-installation/
在这里插入图片描述
在这里插入图片描述


nginx常用命令

在这里插入图片描述


关闭nginx

# 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务
nginx -s stop

# 平稳关闭Nginx,保存相关信息,有安排的结束web服务
nginx -s quit

重新加载nginx配置

# 因改变了Nginx相关配置,需要重新加载配置而重载
nginx -s reload

重新打开nginx日志文件

# 重新打开日志文件
nginx -s reopen

指定nginx配置

# 为 Nginx 指定一个配置文件,来代替缺省的
nginx -c filename
# 按照指定配置去启动nginx
nginx -c conf/nginx.conf

检查nginx配置语法

# 不运行,仅仅测试配置文件
## 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件
nginx -t

## 检查指定配置文件的语法正确性
nginx -t -c conf/nginx.conf

检查nginx版本

# 显示 nginx 的版本
nginx -v

# 显示 nginx 的版本,编译器版本和配置参数
nginx -V

查看nginx日志

# 查看nginx日志
tail -f /var/log/nginx/access.log

源码安装nginx

参考: 搞懂Nginx
参考: nginx从安装到高可用


安装编译环境

# 安装编译环境
yum install -y gcc make \
    pcre pcre-devel zlib zlib-devel \
    openssl openssl-devel && \
    yum clean all && \
    rm -rf /var/cache/yum/*

创建makefile文件

参数解释
–prefix指定Nginx安装的目录
–pid-pathNginx主进程的PID文件。
–lock-path指定Nginx互斥锁文件路径。用于防止同时启动多个 Nginx 进程。
–error-log-path指定Nginx错误日志的保存路径。
–http-log-path指定Nginx访问日志的保存路径
–with-http_gzip_static_module该模块允许 Nginx 对静态文件进行 Gzip 压缩,可以节省带宽
–with-http_ssl_modulehttp_ssl_module 用于启用 HTTPS 支持
–with-http_stub_status_modulestub_status 模块,可以查看 Nginx 的运行状态信息
–with-http_realip_module
–with-threads开启Nginx的线程支持。线程可以提高 Nginx 处理请求的并发能力。
–http-client-body-temp-path指定客户端请求 body 临时文件的存放位置。
–http-proxy-temp-path设定http代理临时目录
–http-fastcgi-temp-path设定fastcgi临时目录
–http-uwsgi-temp-path设定uwsgi临时目录
–http-scgi-temp-path设定scgi临时目录

在这里插入图片描述

# 编译之前,先创建nginx临时目录,如果不创建,在启动nginx的过程中会报错
mkdir /var/temp/nginx -p

# 创建makefile文件
cd nginx-1.18.0 && \
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \    
--error-log-path=/var/log/nginx/error.log \    
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \ 
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_realip_module \
--with-threads \
--http-client-body-temp-path=/var/temp/nginx/client \    
--http-proxy-temp-path=/var/temp/nginx/proxy \    
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \    
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \    
--http-scgi-temp-path=/var/temp/nginx/scgi

编译安装nginx

# 编译安装nginx
make -j && make install && \

# 创建nginx命令行的软链接
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
# 设置时区为上海
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 启动nginx:
nginx

# 停止:
./nginx -s stop

# 重新加载:
./nginx -s reload

nginx常用工具


vscode配置nginx插件

nginx代码高亮插件:

  • nginx-formatter

nginx代码格式化插件:

  • NGINX Configuration

nginx配置语法提示和自动补全插件:

  • NGINX Configuration Language Support

在线生成nginx配置文件

地址: https://www.digitalocean.com/community/tools/nginx?global.app.lang=zhCN


nginx可视化配置工具

项目地址:https://github.com/onlyGuo/nginx-gui


nginx常用配置

参考:https://github.com/dunwu/nginx-tutorial


nginx反向代理

参考: https://www.cnblogs.com/ysocean/p/9392908.html#_label4_2

参考: nginx从安装到高可用
在这里插入图片描述

在这里插入图片描述


1、配置upstream上游

upstream字段配置负载均衡

# 配置上游服务器集群
## proxyName是上游服务器集群的名称
upstream proxyName {
	# 上游服务器1的 IP地址和端口
    server 192.168.1.173:8080;
    # 上游服务器2的 IP地址和端口
    server 192.168.1.174:8080;
    # 上游服务器3的 IP地址和端口
    server 192.168.1.175:8080;
}

在这里插入图片描述


2、配置server

server_name字段配置虚拟主机

# server - 定义一个虚拟主机
server {
    # 监听80端口,接收通过HTTP协议传输的请求。
    listem  80;
    # 定义域名(www.tomcats.com)对应的虚拟主机。
    server_name www.tomcats.com;

    # 处理根目录的请求
    location / {
        # 将请求代理转发给名为tomcats的上游服务器集群
        proxy_pass http://tomcats;
    }
}

3、配置location匹配不同uri做不同处理和响应

配置参考:https://segmentfault.com/a/1190000022315733
location的作用:地址定向,数据缓存,应答控制,以及第三方模块的配置。
location指令用于根据请求的 URI 来匹配不同的处理规则。它可以用来区分不同的静态文件、动态资源、以及不同的后端服务器等。

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;
        server_name example.com;
		# 转发规则
        location / {
        	# proxy_pass转向地址
            proxy_pass http://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_set_header X-Forwarded-Proto $scheme;
        }
    }
}

upstream(上游)配置负载均衡

nginx负载均衡

参考: nginx从安装到高可用

nginx默认采用轮询的方式进行负载均衡


1、weight(加权轮询)

权重值越请求转发到该上游服务器比例越大
权重值为0,只有在其他服务器故障时才会被用于负载均衡。

# 配置上游服务器集群
## proxyName是上游服务器集群的名称
upstream proxyName {
    # 上游服务器1的 IP地址和端口,权重为1
    server 192.168.1.173:8080 weight=1;
    # 上游服务器2的 IP地址和端口,权重为5
    server 192.168.1.174:8080 weight=5;
    # 上游服务器3的 IP地址和端口,权重为2
    server 192.168.1.175:8080 weight=2;
}

2、ip_hash(负载均衡)

ip_hash策略,该策略会使用客户端IP地址哈希值来选择上游服务器
具体来说:当客户端第一次请求时,nginx会将客户端的IP地址进行哈希计算,然后使用哈希值对上游服务器的数量取模,以确定应该使用哪个上游服务器处理该请求。
如果客户端IP地址不变,则后续请求会被转发到同一个上游服务器

hash算法实际上只会计算 192.168.1这段做哈希
使用ip_hash的注意点
不能把后台服务器直接移除,只能标记down.

# 配置上游服务器集群
## proxyName是上游服务器集群的名称
upstream proxyName {
    # ip_hash策略
    ip_hash
    # 上游服务器1的 IP地址和端口
    server 192.168.1.173:8080;
    # 上游服务器2的 IP地址和端口
    server 192.168.1.174:8080;
    # 上游服务器3的 IP地址和端口
    server 192.168.1.175:8080;
}

3、url hash负载均衡

hash $request_url:使用请求的 URL 进行哈希,以便在后续的负载均衡中选择服务器。这里使用的是哈希算法,可以根据不同的负载均衡策略选择不同的算法。

# 定义一个名为 [proxyName] 的 upstream 用于代理请求
upstream proxyName {
    # 根据请求的 URL 进行哈希,以便在后续的负载均衡中选择服务器
    hash $request_url;
    # 定义三个服务器,用于实现负载均衡
    # 上游服务器1的 IP地址和端口
    server 192.168.1.173:8080;
    # 上游服务器2的 IP地址和端口
    server 192.168.1.174:8080;
    # 上游服务器3的 IP地址和端口
    server 192.168.1.175:8080;
}

4、least_conn(最小连接负载均衡)

least_conn:使用最小连接数负载均衡策略,即选择连接数最少的服务器进行转发。使用 least_conn 策略可以避免某个服务器负载过高,而其他服务器负载较轻的情况。

# 定义一个名为 [proxyName] 的 upstream 用于代理请求
upstream proxyName {
    # 使用 least_conn 策略,即选择连接数最少的服务器进行转发
    least_conn;

    # 定义三个服务器,用于实现负载均衡
    # 上游服务器1的 IP地址和端口
    server 192.168.1.173:8080;
    # 上游服务器2的 IP地址和端口
    server 192.168.1.174:8080;
    # 上游服务器3的 IP地址和端口
    server 192.168.1.175:8080;
}

nginx配置示例


nginx大师配置模板

# 全局设置
# 指定 Nginx 运行的用户和用户组
user www-data;

# 自动选择工作进程数,通常为 CPU 核心数
worker_processes auto;

# 错误日志文件的位置
error_log /var/log/nginx/error.log;

# 指定 Nginx 进程 ID 文件的位置
pid /run/nginx.pid;

# 加载动态模块配置文件
# 从指定路径加载所有以 '.conf' 结尾的文件
include /usr/share/nginx/modules/*.conf;

# 其他配置文件
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;


# 事件配置
events {
    # 每个工作进程的最大连接数
    worker_connections 1024;

    # 允许一个工作进程同时接受多个新连接
    multi_accept on;

    # 使用 epoll 事件模型(Linux 平台推荐)
    use epoll;
}

http {
    # 基本设置

    # 定义访问日志格式 'main'
    # 使用 JSON 格式记录各种请求和响应信息,包括时间戳、客户端 IP、主机名、请求 URL 等
    log_format main '{"nginx_timestamp":"$time_iso8601","clientip":"$remote_addr",'
                    '"nginx_host":"$server_addr","host":"$http_host","request":"$request","url":"$request_uri",'
                    '"status":"$status","body_bytes_sent":"$body_bytes_sent",'
                    '"request_time":"$request_time","upstream_response_time":"$upstream_response_time",'
                    '"upstreamhost":"$upstream_addr","xff":"$http_x_forwarded_for","referer":"$http_referer",'
                    '"http_user_agent":"$http_user_agent","request_length":"$request_length","request_method":"$request_method"}';

        # 启用高效的文件传输模式
        sendfile on;

        # 减少网络传输中的 TCP 包数量
        tcp_nopush on;

        # 减少网络传输中的延迟
        tcp_nodelay on;

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

        # 设置 MIME 类型哈希表的最大大小
        types_hash_max_size 4096;

        # 隐藏 Nginx 版本信息
        server_tokens off;

        # MIME 类型
        # 包含 MIME 类型配置文件
        include /etc/nginx/mime.types;

        # 默认的 MIME 类型
        default_type application/octet-stream;

        # 日志设置
        # 指定访问日志文件路径和使用的日志格式 'main'
        access_log /var/log/nginx/access.log main;

        # Gzip 压缩
        # 启用 Gzip 压缩
        gzip on;

        # 禁用对 IE6 的 Gzip 压缩
        gzip_disable "msie6";

        # 启用响应头中的 Vary: Accept-Encoding
        gzip_vary on;

        # 启用对所有代理请求的 Gzip 压缩
        gzip_proxied any;

        # 设置 Gzip 压缩级别(1-9)
        gzip_comp_level 6;

        # 设置 Gzip 缓冲区大小
        gzip_buffers 16 8k;

        # 启用对 HTTP/1.1 的 Gzip 压缩
        gzip_http_version 1.1;

        # 指定要压缩的 MIME 类型
        gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

        # 缓存机制
        # 配置缓存路径和参数
        proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

        # 负载均衡设置
        upstream backend {
            # 定义后端服务器1,权重为5
            server backend1.example.com weight=5;

            # 定义后端服务器2
            server backend2.example.com;

            # 定义后端服务器3,作为备份服务器
            server backend3.example.com backup;
        }

        # 服务器块
        server {
            # 监听端口 80(HTTP)
            listen 80;

            # 定义服务器名称
            server_name example.com www.example.com;

            # 设置网站根目录
            root /var/www/html;

            # 设置默认索引文件
            index index.php index.html index.htm;

            # 安全设置
            # 防止点击劫持
            add_header X-Frame-Options "SAMEORIGIN";

            # 防止 MIME 类型嗅探
            add_header X-Content-Type-Options "nosniff";

            # 启用 XSS 保护
            add_header X-XSS-Protection "1; mode=block";

            # 缓存设置
            location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
                # 设置缓存过期时间为 30 天
                expires 30d;

                # 设置缓存控制头部
                add_header Cache-Control "public, no-transform";
            }

            # 动态内容处理(PHP 示例)
            location ~ \.php$ {
                # 包含 FastCGI 配置文件
                include snippets/fastcgi-php.conf;

                # 指定 PHP-FPM 进程的 Unix 套接字路径
                fastcgi_pass unix:/run/php/php7.4-fpm.sock;

                # 设置 SCRIPT_FILENAME 参数
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

                # 包含 FastCGI 参数配置文件
                include fastcgi_params;
            }

            # 反向代理设置
            location /api/ {
                # 将请求转发给后端服务器池
                proxy_pass http://backend;

                # 设置 Host 头部
                proxy_set_header Host $host;

                # 设置 X-Real-IP 头部
                proxy_set_header X-Real-IP $remote_addr;

                # 设置 X-Forwarded-For 头部
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                # 设置 X-Forwarded-Proto 头部
                proxy_set_header X-Forwarded-Proto $scheme;

                # 启用缓存
                proxy_cache my_cache;

                # 设置缓存有效期为 10 分钟
                proxy_cache_valid 200 302 10m;

                # 设置 404 错误的缓存有效期为 1 分钟
                proxy_cache_valid 404 1m;
            }

            # 错误页面
            # 自定义 404 错误页面
            error_page 404 /404.html;

            location = /404.html {
                # 仅内部请求可访问
                internal;
            }

            # 自定义 50x 错误页面
            error_page 500 502 503 504 /50x.html;

            location = /50x.html {
                # 仅内部请求可访问
                internal;
            }
        }

        # HTTPS 服务器块(可选)
        server {
            # 监听端口 443(HTTPS)
            listen 443 ssl;

            # 定义服务器名称
            server_name example.com www.example.com;

            # 指定 SSL 证书路径
            ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;

            # 指定 SSL 证书密钥路径
            ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;

            # 启用 TLS 协议版本
            ssl_protocols TLSv1.2 TLSv1.3;

            # 优先使用服务器端的密码套件
            ssl_prefer_server_ciphers on;

            # 指定密码套件
            ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";

            # 设置网站根目录
            root /var/www/html;

            # 设置默认索引文件
            index index.php index.html index.htm;

            # 安全设置
            # 防止点击劫持
            add_header X-Frame-Options "SAMEORIGIN";

            # 防止 MIME 类型嗅探
            add_header X-Content-Type-Options "nosniff";

            # 启用 XSS 保护
            add_header X-XSS-Protection "1; mode=block";

            # 缓存设置
            location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
                # 设置缓存过期时间为 30 天
                expires 30d;

                # 设置缓存控制头部
                add_header Cache-Control "public, no-transform";
            }

            # 动态内容处理(PHP 示例)
            location ~ \.php$ {
                # 包含 FastCGI 配置文件
                include snippets/fastcgi-php.conf;

                # 指定 PHP-FPM 进程的 Unix 套接字路径
                fastcgi_pass unix:/run/php/php7.4-fpm.sock;

                # 设置 SCRIPT_FILENAME 参数
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

                # 包含 FastCGI 参数配置文件
                include fastcgi_params;
            }

            # 反向代理设置
            location /api/ {
                # 将请求转发给后端服务器池
                proxy_pass http://backend;

                # 设置 Host 头部
                proxy_set_header Host $host;

                # 设置 X-Real-IP 头部
                proxy_set_header X-Real-IP $remote_addr;

                # 设置 X-Forwarded-For 头部
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                # 设置 X-Forwarded-Proto 头部
                proxy_set_header X-Forwarded-Proto $scheme;

                # 启用缓存
                proxy_cache my_cache;

                # 设置缓存有效期为 10 分钟
                proxy_cache_valid 200 302 10m;

                # 设置 404 错误的缓存有效期为 1 分钟
                proxy_cache_valid 404 1m;
            }

            # 错误页面
            # 自定义 404 错误页面
            error_page 404 /404.html;

            location = /404.html {
                # 仅内部请求可访问
                internal;
            }
        }
    }

生产环境示例

server {
    # 监听80端口
    listen 80;
    # 定义服务器名称为 php.1314000.cn
    server_name php.1314000.cn;
    # 网站根目录
    root /data/web8080;
    # 访问日志文件路径
    access_log /usr/local/ngin/logs/success_php1314000cn.log main;

    location / {
        # 使用代理后的真实IP进行判断
        # if ($http_x_forwarded_for ~* '124\.204\.248\.85') {
        #     return 403;  # 禁止来自这个IP的访问
        # }

        # 如果请求的文件不存在,重写URL到 index.php,并传递原始路径作为参数
        if (!-e $request_filename) {
            rewrite ^/(.*)$ /index.php?s=/$1 last;
            break;
        }
        # 默认访问文件
        index index.html index.htm index.php;
    }

    location /tk {
        # 允许指定的IP访问该路径
        allow 124.204.248.85;
        # 禁止所有其他IP访问
        deny all;
        # 重新定向到百度
        # rewrite ^ https://www.baidu.com/ redirect;
        # break;
    }

    location ~ /admin {
        # 允许指定IP访问 /admin 路径
        allow 124.204.248.85;
        # 禁止其他所有IP访问
        deny all;
    }

    location ~ \.php$ {
        # 将PHP请求转发到运行在127.0.0.1:9000上的FastCGI处理器
        fastcgi_pass 127.0.0.1:9000;
        # 定义FastCGI参数,传递实际的PHP脚本路径
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        # 包含标准的FastCGI参数配置
        include fastcgi_params;
    }
}
nginx常用操作命令包括启动、关闭、重启、检查配置文件和重新打开日志文件等操作。 启动nginx有两种方式: 1. 直接启动,进入nginx安装目录,执行命令: ``` cd /usr/local/nginx/sbin ./nginx ``` 或者直接执行: ``` /usr/local/nginx/sbin/nginx ``` 2. 指定配置文件方式启动,进入nginx安装目录,执行命令: ``` cd /usr/local/nginx/sbin ./nginx -c /usr/local/nginx/conf/nginx.conf ``` 或者执行: ``` /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ``` 关闭nginx有两种方式: 1. 快速停止nginx,进入nginx安装目录,执行命令: ``` cd /usr/local/nginx/sbin ./nginx -s stop ``` 2. 完整有序停止nginx,等待所有请求结束后再关闭nginx,进入nginx安装目录,执行命令: ``` cd /usr/local/nginx/sbin ./nginx -s quit ``` 重启nginx的命令是: ``` kill -HUP 主进程号 ``` 其中,主进程号可以通过执行命令`ps -ef | grep nginx`查看得到。 检查nginx配置文件是否有语法错误的命令是: ``` ./nginx -t ``` 或者显示指定配置文件: ``` ./nginx -t -c /usr/local/nginx/conf/nginx.conf ``` 这个命令会检查配置文件的正确性,如果有语法错误会返回错误信息。 重新打开nginx日志文件的命令是: ``` ./nginx -s reopen ``` 这个命令用于完成新日志文件的生成,当需要切割nginx日志文件时,可以使用该命令。 综上所述,nginx常用操作命令包括: - 启动nginx:./nginx 或者 /usr/local/nginx/sbin/nginx - 指定配置文件方式启动:./nginx -c /usr/local/nginx/conf/nginx.conf 或者 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf - 关闭nginx:./nginx -s stop 或者 ./nginx -s quit - 重启nginx:kill -HUP 主进程号 - 检查配置文件是否有语法错误:./nginx -t 或者 ./nginx -t -c /usr/local/nginx/conf/nginx.conf - 重新打开日志文件:./nginx -s reopen
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

识途老码

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值