nginx.conf配置文件详解、案例,Nginx常用命令与模块

news2025/1/12 18:06:52

目录

一、Nginx常用命令

二、Nginx涉及的文件

2.1、Nginx 的默认文件夹

2.2、Nginx的主配置文件nginx.conf 

 nginx.conf 配置的模块

2.2.1、全局块:全局配置,对全局生效

2.2.2、events块:配置影响 Nginx 服务器与用户的网络连接

2.2.3、http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置

2.2.4、server块:配置虚拟主机的相关参数

2.2.5、location块:用于配置匹配的 uri

 实验:基于域名和授权访问控制和端口的nginx

2.3、Nginx的四大模块——proxy、headers、upstream、stream模块


本篇使用源代码编译安装的方式安装 nginx ,并未用包管理器安装(即在 CentOS 上使用 yum 或是 Ubuntu 上使用 apt-get 直接安装)。

安装nginx: Nginx的介绍、自定义编译安装Nginx-CSDN博客

一、Nginx常用命令

nginx:打开 Nginx Web 服务器。

nginx  -h:显示 Nginx 的帮助信息。
nginx  -v:显示 Nginx 版本并退出。
nginx  -V:显示 Nginx 版本和配置选项,然后退出。
nginx  -t:测试配置文件并退出(较为常用)。
nginx  -T:测试配置文件并将其转储到控制台(标准输出),然后退出。
nginx  -q:在测试配置文件时禁止显示非错误消息。
nginx  -s signal:向主进程发送信号(停止、退出、重新打开、重新加载)。
nginx  -p prefix:设置 Nginx 的前缀路径(默认为 /etc/nginx/)。
nginx  -e filename:设置错误日志文件的路径(默认为 /var/log/nginx/error.log)。
nginx  -c filename:设置配置文件的路径(默认为 /etc/nginx/nginx.conf)。
nginx  -g directives:在不修改配置文件的情况下设置全局指令。

nginx -s stop:立即关闭 Nginx

killall nginx:结束所有名为 "nginx" 的进程。如果 nginx -s stop 无法正常关闭 Nginx 进程,可以尝试使用 killall nginx 强制结束所有相关进程。
nginx -s reload:重新加载  

 可以使用man手册来查看详细的信息。如果没安装,去源码包里找到man文件。

man        路径/nginx.8    (不加路径打不开man帮助,该命令会显示nginx相关的帮助文件,其中包含了nginx的配置选项、命令行参数以及其他相关信息。nginx.8可以放在方便管理的位置)

//示例
[root@12 ~]# man /opt/nginx-1.22.0/man/nginx.8

二、Nginx涉及的文件

2.1、Nginx 的默认文件夹

[root@12 ~]# cd /usr/local/nginx/
[root@12 nginx]# ls
client_body_temp  fastcgi_temp  logs        run   scgi_temp
conf              html          proxy_temp  sbin  uwsgi_temp

1、logs:存储 Nginx 日志文件的目录。logs目录可以放在其他路径,比如 /var/logs/nginx 里面。
2、conf:是 Nginx 配置文件的存储目录。其中 nginx.conf 是 nginx 服务器的最核心最主要的配置文件,其他的 .conf 则是用来配置 Nginx 相关的功能的。例如 fastcgi 功能使用的是 fastcgi.conf和 fastcgi_params 两个文件,配置文件一般都有个样板配置文件,是文件名 .default 结尾,使用的使用将其复制为并将 default 去掉即可。

3、html:保存了 Nginx 服务器的 web 文件,但是可以更改为其他目录保存 web 文件,另外还有一个50x的 web 文件是默认的错误页面提示页面。

4、sbin:保存 Nginx 二进制启动脚本,可以接受不同的参数以实现不同的功能

5、run:用于存储 Nginx 主进程的 PID 文件。

6、client_body_temp:用于存储临时请求体数据的目录。

7、fastcgi_temp:存储 FastCGI 模块临时文件的目录。

8、scgi_temp:用于存储 SCGI 模块临时文件的目录。

9、proxy_temp:用于存储代理模块临时文件的目录。

10、uwsgi_temp:用于存储 uWSGI 模块临时文件的目录。

2.2、Nginx的主配置文件nginx.conf 

nginx.conf 位置在 conf 目录中,nginx.conf 是 nginx 服务器的最核心最主要的配置文件。

 nginx.conf 配置的模块

        nginx.conf 有 全局块、events块、http块、server块、location块

        对 nginx.conf 文件中部分内容解释

//打开 nginx.conf 文件
[root@12 ~]# vim /usr/local/nginx/conf/nginx.conf
2.2.1、全局块:全局配置,对全局生效
#解释
#user  nobody;
#运行用户,若编译时未指定则默认为nobody
worker_processes  1;
#工作进程数量,可配置成服务器内核数*2,如果网站访问量不大,一般设为1就够用了

#error_log  logs/error.log;
#错误日志文件的位置
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid        /usr/local/nginx/run/nginx.pid;
#指定PID文件的位置
2.2.2、events块:配置影响 Nginx 服务器与用户的网络连接
events {
    #use epoll;
    #使用epoll模型, 2.6及以上版本的系统内核,建议使用epoll模型以提高性能
    worker_connections  1024;    #每个进程处理1024个连接
}

1、如提高每个进程的连接数还需执行"ulimit -n 65535"命令临时修改本地每个进程可以同时打开的最大文件数。
2、在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)
3、可使用"ulimit -a"命令查看系统允许当前用户进程打开的文件数限制。

注意:

全局块中的 worker_processes 设置的是进程数量,events块中的 worker_connections 设置的是每个进程处理的连接数。两个数量相乘为最大同时处理的nginx worker的进程数量。这个数量可能会超过系统所限制的资源,所以在配置  worker_processes 和 worker_connections 时,首先考虑修改 /etc/security/limits.conf 文件,该文件用于设置系统资源限制和限制策略。

//举个例子,如果 nginx.conf 中 worker_processes 和 worker_connections 配置如下:
worker_processes  2;
events {
    worker_connections  15000;
    #一般在10000~15000,要具体情况
}

//可以看到30000的最大进程数量
//修改 /etc/security/limits.conf 文件
[root@12 ~]# vim /etc/security/limits.conf

#添加以下内容:

soft nproc 65535
#设置用户或用户组的最大进程数软限制为65535。
#软限制是系统实际应用的限制值,可以被用户修改,但不能超过硬限制。

hard nproc 65535
#设置用户或用户组的最大进程数硬限制为65535。
#硬限制是系统设定的最大限制值,用户不能将其超过。

soft nofile 65535
#设置用户或用户组可以打开的文件描述符数软限制为65535。

hard nofile 65535
#设置用户或用户组可以打开的文件描述符数硬限制为65535。

//保存退出
//注意,该要让文件生效,只有重启虚拟机,即重启机器
//重启
[root@12 ~]# reboot
2.2.3、http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
//http配置
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;

    #此选项允许或禁止使用socket的TCP_CORK的选项(发送数据包前先缓存数据) ,
    #此选项仅在使用sendfile的时候使用
    #tcp_nopush     on;

    #连接保持超时时间,单位是秒
    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip模块设置,设置是否开启gzip压缩输出
    #gzip  on;


    server {
        ......
    }
    ......
}

日志格式设定:
$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local: 用来记录访问时间与时区;
$request: 用来记录请求的url与http协议;
$status: 用来记录请求状态;成功是200,
$body_bytes_sent :记录发送给客户端文件主体内容大小;
$http_referer:用来记录从哪个页面链接访问过来的;
$http_user_agent:记录客户浏览器的相关信息;
通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,
通过$remote_add拿到的IP地址是反向代理服务器的iP地址。
反向代理服务器在转发请求的http头信息中,
可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。 

2.2.4、server块:配置虚拟主机的相关参数

注:一个 http 块中可以有多个 server 块,一个 server 块可以有多个 location 块。

#server块
    server {
    
        listen       80;
        #监听地址及端口        

        server_name  localhost;
        #站点域名,可以有多个,用空格隔开

        charset utf-8;
        #网页的默认字符集,这里改为utf-8,默认为koi8-r

        #根目录配置
        location / {
            #网站根目录的位置/usr/local/nginx/html
            root   html;
            #如果请求的URI对应的文件不存在,
            #则会按照指定的顺序尝试使用 index.html 或 index.htm 文件作为默认页面。
            index  index.html index.htm;
        }

        #错误的反馈页面
        error_page   500 502 503 504  /50x.html;
        ......
    }
2.2.5、location块:用于配置匹配的 uri

注意:location 匹配的内容来源是来自网页的URI,而不是URL(URL代表整个链接如:www.baidu.com/images/search,而URI则是/images/search。所以nginx的location匹配的是URI)

//更改工作路径
//案例一:
[root@12 ~]# vim /usr/local/nginx/conf/nginx.conf
location /test {    #指 ..,/nginx/html 目录下的 /test 目录里的index.html文件
    root   html;    #指 .../nginx/html 目录
    index  index.html index.htm;
}
//保存退出后,重启nginx服务
//这里可以先用 nginx -t 命令查看配置文件是否有问题
[root@12 ~]# systemctl restart nginx

//相应的,就需要在html目录下创建 test 目录,且在 test 目录下创建 index.html(否则在浏览器访问“虚拟机IP/test”时会报”404“的错误)
//在浏览器访问“虚拟机IP/test”,将查找本人的nginx服务器的 /usr/local/nginx/html/test/index.html 文件

//案例二:
[root@12 ~]# vim /usr/local/nginx/conf/nginx.conf
location /test {    #指 /opt/html 目录下的 /test 目录里的index.html文件
    root   /opt/html;    #指 /opt/html 目录
    index  index.html index.htm;
}
//保存退出后,重启nginx
[root@12 ~]# systemctl restart nginx
//创建/opt/html/test/index.html
//浏览器访问“虚拟机IP/test”,记得清理浏览器缓存

location常见配置指令:root、alias、proxy_pass(反向代理配置)

其中,nginx是通过alias设置虚拟目录,在nginx的配置中,alias目录和root目录是有区别的:

1)alias指定的目录是准确的,即location匹配访问的path目录下的文件直接是在alias目录下查找的;

2)root指定的目录是location匹配访问的path目录的上一级目录,这个path目录一定要是真实存在root指定目录下的;

3)使用alias标签的目录块中不能使用rewrite的break(具体原因不明);另外,alias指定的目录后面必须要加上"/"符号!!

4)alias虚拟目录配置中,location匹配的path目录如果后面不带"/",那么访问的url地址中这个path目录后面加不加"/"不影响访问,访问时它会自动加上"/";
但是如果location匹配的path目录后面加上"/",那么访问的url地址中这个path目录必须要加上"/",访问时它不会自动加上"/"。如果不加上"/",访问就会失败!
5)root目录配置中,location匹配的path目录后面带不带"/",都不会影响访问

其他区别:
1、 alias 只能作用在location中,而root可以存在server、http和location中。
2、 alias 后面必须要用 “/” 结束,否则会找不到文件,而 root 则对 ”/” 可有可无。

//语法上简单的说root是拼接,alias是精确指定
location /test {
            root   /var/www/html;    #不加上test
            index  index.html index.htm;
        }
//访问时末尾可加可不加“/”	
	
location /test {
            alias   /var/www/html/test;    #加上test
            index  index.html index.htm;
        }
//访问时需要在末尾加上“/”。浏览器访问“IP地址/test/”

location块中可以添加控制规则

访问控制规则如下:
deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问。
allow IP/IP 段:允许某个 IP 或 IP 段的客户端访问。
规则从上往下执行,如匹配则停止,不再往下匹配。

server {
	location / {
		......
		##添加控制规则##
		deny 172.16.80.21; 					#拒绝访问的客户端 IP
		allow all;							#允许其它IP客户端访问
	}
}

 实验:基于域名和授权访问控制和端口的nginx

//配置主机名与IP地址的映射关系。
[root@12 ~]# echo "172.16.80.12 www.xxtg.com" >> /etc/hosts

//为虚拟主机准备网页文档
[root@12 ~]# mkdir -p /opt/html/xxtg
[root@12 ~]# echo "this is xxtg" >> /opt/html/xxtg/index.html

//下载httpasswd工具,生成用户密码认证文件要用到
[root@12 ~]# yum install -y httpd-tools
//创建一个xxtg用户,密码设为123,passwd.db存储用户信息
[root@12 ~]# htpasswd -c /usr/local/nginx/passwd.db xxtg
New password:
Re-type new password:
Adding password for user xxtg
//修改文件为nginx用户
[root@12 ~]# chown nginx /usr/local/nginx/passwd.db
//设为只读
[root@12 ~]# chmod 400 /usr/local/nginx/passwd.db


//修改配置文件
[root@12 ~]# vim /usr/local/nginx/conf/nginx.conf


worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid        /usr/local/nginx/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       172.16.80.12:8080;    #设置监听地址,监听 8080 端口
        server_name  www.xxtg.com;    #设置域名

        charset utf-8;

        access_log  logs/www.xxtg.com.log;
        ##access_log  logs/host.access.log  main;

        location /xxtg {
            root   /opt/html;
            index  index.html index.htm;
            #添加认证配置
            auth_basic "secret";
            auth_basic_user_file /usr/local/nginx/passwd.db;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}



//查看nginx.conf文件是否出错
[root@12 ~]# nginx -t
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
//重启nginx
[root@12 ~]# systemctl restart nginx

在浏览器中访问 172.16.80.12:8080/xxtg/

 输入用户root,密码123

访问页面 (/opt/html/xxtg/index.html)

2.3、Nginx的四大模块——proxy、headers、upstream、stream模块

Proxy 模块
proxy 模块是 Nginx 的核心模块之一,用于实现反向代理功能。它允许将客户端的请求代理到后端的服务器,并将响应返回给客户端。proxy 模块支持 HTTP、HTTPS、FastCGI、uWSGI、SCGI 等多种协议。通过配置 proxy_pass 指令,可以指定代理的后端服务器地址。

Headers 模块
headers 模块用于处理 HTTP 请求和响应的头部信息。它允许添加、修改或删除请求头和响应头,实现对头部信息的定制化控制。headers 模块提供了一系列的指令,如 add_header、set_header、more_set_headers 等,用于操作头部信息。

Upstream 模块
upstream 模块用于配置反向代理服务器组(也称为上游服务器组)。它定义了后端服务器的列表和相关的负载均衡策略,用于分发请求到后端服务器。upstream 模块通过 upstream 块来配置后端服务器组,其中包括 server 指令用于定义后端服务器。

Stream 模块
stream 模块是 Nginx 的流处理模块,用于处理 TCP 和 UDP 流量。它提供了 TCP/UDP 代理、负载均衡、数据包过滤等功能。stream 模块通过 stream 块来配置流的处理规则,可以根据目标地址和端口等条件进行流量的转发和处理。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1471231.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker 容器访问 GPU 资源使用指南

概述 nvidia-docker 和 nvidia-container-runtime 是用于在 NVIDIA GPU 上运行 Docker 容器的两个相关工具。它们的作用是提供 Docker 容器与 GPU 加速硬件的集成支持,使容器中的应用程序能够充分利用 GPU 资源。 nvidia-docker 为了提高 Nvidia GPU 在 docker 中的…

Python爬虫-爬取豆瓣高分电影封面

本文是本人最近学习Python爬虫所做的小练习。如有侵权,请联系删除。 页面获取url 代码 import requests import os import re# 创建文件夹 path os.getcwd() /images if not os.path.exists(path):os.mkdir(path)# 获取全部数据 def get_data():# 地址url "…

输电线路微波覆冰监测装置助力电网应对新一轮寒潮

2月19日起,湖南迎来新一轮寒潮雨雪冰冻天气。为做好安全可靠的供电准备,国网国网湘潭供电公司迅速启动雨雪、覆冰预警应急响应,采取“人巡机巡可视化巡视”的方式,对输电线路实施三维立体巡检。该公司组织员工对1324套通道可视化装…

leetcode hot100 买卖股票的最佳时机二

注意,本题是针对股票可以进行多次交易,但是下次买入的时候必须保证上次买入的已经卖出才可以。 动态规划可以解决整个股票买卖系列问题。 dp数组含义: dp[i][0]表示第i天不持有股票的最大现金 dp[i][1]表示第i天持有股票的最大现金 递归公…

全面InfiniBand解决方案——LLM培训瓶颈问题

ChatGPT对技术的影响引发了对人工智能未来的预测,尤其是多模态技术的关注。OpenAI推出了具有突破性的多模态模型GPT-4,使各个领域取得了显著的发展。 这些AI进步是通过大规模模型训练实现的,这需要大量的计算资源和高速数据传输网络。端到端…

东莞IBM服务器维修之IBM x3630 M4阵列恢复

记录东莞某抖音电商公司送修一台IBM SYSTEM X3630 M4文档服务器RAID6故障导致数据丢失的恢复案例 时间:2024年02月20日, 服务器品牌:IBM System x3630 M4,阵列卡用的是DELL PERC H730P 服务器用途和用户位置:某抖音电…

【Flink精讲】Flink性能调优:内存调优

内存调优 内存模型 JVM 特定内存 JVM 本身使用的内存,包含 JVM 的 metaspace 和 over-head 1) JVM metaspace: JVM 元空间 taskmanager.memory.jvm-metaspace.size,默认 256mb 2) JVM over-head 执行开销&#xff1…

Spring Boot对接RocketMQ示例

部署服务 参考RocketMq入门介绍 示例 引入maven依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.2</version></dependency>完整依赖如下&am…

C# Onnx Yolov8-OBB 旋转目标检测

目录 效果 模型信息 项目 代码 下载 C# Onnx Yolov8-OBB 旋转目标检测 效果 模型信息 Model Properties ------------------------- date&#xff1a;2024-02-26T08:38:44.171849 description&#xff1a;Ultralytics YOLOv8s-obb model trained on runs/DOTAv1.0-ms.ya…

关系型数据库事务的四性ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)

关系型数据库事务的四性ACID:原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isolation&#xff09;和持久性&#xff08;Durability&#xff09; 事务的四性通常指的是数据库事务的ACID属性&#xff0c;包括原子性&…

C语言第三十一弹---自定义类型:结构体(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 目录 1、结构体内存对齐 1.1、为什么存在内存对齐? 1.2、修改默认对齐数 2、结构体传参 3、结构体实现位段 3.1、什么是位段 3.2、位段的内存分配 3.3、…

qt-C++笔记之事件过滤器

qt-C笔记之事件过滤器 —— 杭州 2024-02-25 code review! 文章目录 qt-C笔记之事件过滤器一.使用事件过滤器和不使用事件过滤器对比1.1.使用事件过滤器1.2.不使用事件过滤器1.3.比较 二.Qt 中事件过滤器存在的意义三.为什么要重写QObject的eventFilter方法&#xff1f;使用QO…

数据结构:链表的冒泡排序

法一&#xff1a;修改指针指向 //法二 void maopao_link(link_p H){if(HNULL){printf("头节点为空\n");return;}if(link_empty(H)){printf("链表为空\n");return;}link_p tailNULL;while(H->next->next!tail){link_p pH;link_p qH->next;while(q…

常见的音频与视频格式

本专栏是汇集了一些HTML常常被遗忘的知识&#xff0c;这里算是温故而知新&#xff0c;往往这些零碎的知识点&#xff0c;在你开发中能起到炸惊效果。我们每个人都没有过目不忘&#xff0c;过久不忘的本事&#xff0c;就让这一点点知识慢慢渗透你的脑海。 本专栏的风格是力求简洁…

【Unity】使用Video Player播放CG视频

1.在UI上新建一个Raw Image 2.添加Video Player 【参数详解】 Source&#xff1a;视频源类型&#xff0c;有Video Clip 和 URL两种Video Clip&#xff1a;视频片段&#xff0c;当Source选择video clip生效URL&#xff1a;视频路径&#xff0c;当Source选择URL生效Play On Awak…

洛谷C++简单题小练习day21—梦境数数小程序

day21--梦境数数--2.25 习题概述 题目背景 Bessie 处于半梦半醒的状态。过了一会儿&#xff0c;她意识到她在数数&#xff0c;不能入睡。 题目描述 Bessie 的大脑反应灵敏&#xff0c;仿佛真实地看到了她数过的一个又一个数。她开始注意每一个数码&#xff08;0…9&#x…

在IDEA中创建vue hello-world项目

工作中最近在接触vue前端项目&#xff0c;记录一下从0搭建一个vue hello world项目的步骤 1、本地电脑安装配置node、npm D:\Project\vue\hello-world>node -v v14.21.3 D:\Project\vue\hello-world>npm -v 6.14.18 D:\Project\vue\hello-world> 2、设置npm国内淘…

GPU over IP/IB:趋动OrionX产品的创新之路

在数字化转型的浪潮中&#xff0c;GPU over IP/IB技术正成为数据中心和云计算领域的一股新兴力量。这种技术通过将物理GPU资源虚拟化&#xff0c;实现了跨网络的高效利用&#xff0c;为AI、机器学习、科学计算等高性能计算任务提供了前所未有的灵活性和扩展性。 本文将深入探讨…

【管理咨询宝藏资料25】某能源集团五年发展战略报告

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏资料25】某能源集团五年发展战略报告 【关键词】战略规划、五年战略、管理咨询 【文件核心观点】 - LL应以快速做大做强为目标&#xff0c;专注…

VUE3环境搭建开发准备

VUE3 Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0c;Vu…