[Linux] nginx配置的主配置文件

news2025/1/20 5:47:51

一、六个模块的作用

        全局块:全局配置,对全局生效;

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

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

        server块:配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块;

        location块:用于配置匹配的 uri ;

        upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分。

二、认识Nginx服务的主配置文件

2.1 全局配置模块

是配置文件从头开始到 events 块之间的内容,主要设置的是影响nginx服务器整体运行的配置指令。比如 worker_process值越大,可以支持的并发处理量也越多,但是还是和服务器的硬件相关。

vim /usr/local/nginx/conf/nginx.conf  #主配置文件位置

#user nobody; 				    #运行用户,若编译时未指定则默认为 nobody
worker_processes 1; 			#工作进程数量,一般设置为和 CPU 核数一样;设置为auto,nginx将会自己获取这个数值
#error_log logs/error.log; 		#错误日志文件的位置
#pid logs/nginx.pid; 			#PID 文件的位置
worker_rlimit_nofile 60000;		#设置所有worker进程最大可以打开的文件数,默认为1024

 2.2 I/O 事件配置

events {
    use epoll; 			        #使用 epoll I/O模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能
    worker_connections 60000; 	#每个进程处理 60000 个连接默认是1024个
    multi_accept on;            #是否一次性将监听到的连接全接收进来,默认为off,关闭时一次接收一条连接
    accept_mutex on;            #默认为on,开启时表示以串行方式接入新连接,否则将通报给所有worker。这可能会浪费资源并产生不可预计的后果,例如惊群问题
}

如果提高每个进程的连接数还需执行“ulimit -n 65535”命令临时修改本地每个进程可以同时打开的最大文件数。

永久修改的方式:

[root@CXK /opt/nginx-1.24.0/conf]#vim /etc/security/limits.conf 

#在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。


#可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。


#epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。(实现异步非阻塞)

 2.3 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;   ##开启文件传输模式
	
    #tcp_nopush     on;   ##只在sendfile on时有效。调用tcp_cork方法,让数据包不会马上传送出去,等到数据包最大时,一次性的传输出去,这样有助于解决网络堵塞。默认为off。
	
    #keepalive_timeout  0;  ##连接保持超时时间,单位是秒
    keepalive_timeout  65;  ##连接保持超时时间,单位是秒
	
    #gzip  on;   ##gzip模块设置,设置是否开启gzip压缩输出

 2.4 web服务监听设置

server {
		
		listen 80;   ##监听地址及端口
		
		server_name www.kgc.com;   ##站点域名,可以有多个,用空格隔开
		
		charset utf-8;   ##网页的默认字符集
		
		location / {     ##根目录配置
			
			root html;     ##网站根目录的位置/usr/local/nginx/html
			
			index index.html index.php;   ##默认首页文件名
		}
		
		error_page 500 502 503 504 /50x.html;     ##内部错误的反馈页面
		
		location = /50x.html {      ##错误页面配置
			root html;
		}
	}
}

 2.5 其他设置 

日志格式设定:
$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地址和原来客户端的请求的服务器地址。

location常见配置指令,root、alias、proxy_pass
root(根路径配置):root /var/www/html

处理方式: root路径+location路径
请求www.kgc.com/test/1.html,会返回文件/var/www/html/test/1.html

alias(别名配置):alias /var/www/html

处理方式:alias路径替换location路径
请求www.yang.com/test/1.html,会返回文件/var/www/html/1.html

root和alias对比

当设置  location /test{     }

alias /var/www/html  和   root /var/www/html  有什么区别?

alias是别名设置,将设置的网页放在/var/www/html下,访问

root 是根目录设置 ,将设置的网页放在 /var/www/html/test 下,访问

 三、nginx访问状态统计

1. 查看访问统计配置的相关模块 
cat /opt/nginx-1.24.0/auto/options | grep YES   #可查看 nginx 已安装的所有模块

[root@CXK ~]#/usr/local/nginx/sbin/nginx -V 或者nginx -V  查看已安装的 Nginx 是否包含 HTTP_STUB_STATUS 模块

2. 修改主配置文件,添加访问状态统计模块  
#主配置备份,防止设置错误,无法还原
cd /usr/local/nginx/conf
cp nginx.conf nginx.conf.bak

 修改主配配置具体操作:


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

server {
        listen       80;
        server_name  www.cxk.com;   #主机名设置

        charset utf-8;              #万国字符集

        #access_log  logs/host.access.log  main;

        location / {
            root   html;            #Nginx默认网页设置
            index  index.html index.htm;
        }
        #访问位置为/status
        location /status {
            stub_status on;  #打开状态统计功能
            access_log off;  #关闭此位置的日志记录
        }

3.重启nginx服务,访问测试:
nginx -t #检查nginx配置文件是否有错误
kill -1 11799

四、nginx授权访问控制

 1. 生成用户密码认证文件 
yum install -y httpd-tools
htpasswd -c /usr/local/nginx/passwd.db lisi
chown nginx /usr/local/nginx/passwd.db
chmod 400 /usr/local/nginx/passwd.db

2. 修改主配置 
vim /usr/local/nginx/conf/nginx.conf
 
server {
		location / {
			......
			##添加认证配置##
			auth_basic "secret";				#设置密码提示框文字信息
			auth_basic_user_file /usr/local/nginx/passwd.db;  #密码认证模块的加载配置
		}
	}

3. 重启服务,进行访问测试 
nginx -t #检查nginx配置文件是否有错误
kill -1 11799

 五、nginx客户端访问控制

 设置方式类似于黑白名单

 1. 设置前的访问,其他主机访问测试:

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

2. 修改主配置
vim /usr/local/nginx/conf/nginx.conf
......
    server {
        location / {
            ......
            ##添加控制规则##
            allow 192.168.136.100;   #允许当前主机
            allow 127.0.0.1;         #允许自己
            allow 192.168.136.1;     #允许真机
            allow 192.168.136.120;   #允许访问的客户端 IP
            deny all;                #拒绝其它IP客户端访问
        }
    }

 3. 重启服务,进行访问测试 
nginx -t #检查nginx配置文件是否有错误
kill -1 11799

 

 六、nginx虚拟主机

6.1 基于域名的虚拟主机

1.为虚拟主机提供域名解析

echo "192.168.136.100 www.cxk.com www.kun.com" >> /etc/hosts  添加到本机域名解析
2.为虚拟主机准备网页文档 

mkdir -p /var/www/html/cxk  #分别创建两个不同域名的网页目录
mkdir -p /var/www/html/kun  #分别创建两个不同域名的网页目录
echo "<h1>cxk hhh</h1>" > /var/www/html/cxk/index.html #为两个不同的域名默认首页网页添加内容
echo "<h1>kun hhh</h1>" > /var/www/html/kun/index.html #为两个不同的域名默认首页网页添加内容
3.修改Nginx的配置文件 

vim /usr/local/nginx/conf/nginx.conf
server {
        listen       80;
        server_name  www.cxk.com;
        charset utf-8;
        access_log  logs/www.cxk.access.log;  #不同虚拟主机的域名访问日志
        location / {
            root   /var/www/html/cxk;         #默认网页
            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;
        }
}
        server {
        listen       80;
        server_name  www.kun.com;
        charset utf-8;
        access_log  logs/www.kun.access.log;
        location / {
            root   /var/www/html/kun;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
4.重启服务,测试
systemctl restart nginx

6.2 基于IP 的 Nginx 虚拟主机 

 1. 设置虚拟主机IP 
[root@localhost conf]#ifconfig ens33:0 192.168.136.200/24
[root@localhost conf]#ifconfig ens33:0 

2. 修改主配置文件

vim nginx.conf

server {
        listen  192.168.136.100:80;
        server_name  localhost;

        charset utf-8;

        access_log  logs/www.cxk.access.log;

        location / {
            root   /var/www/html/cxk;
            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;
        }
}
server {
        listen  192.168.136.200:80;
        server_name  localhost;

        charset utf-8;

        access_log  logs/www.kun.access.log;

        location / {
            root   /var/www/html/kun;
            index  index.html index.htm;
        }
error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
3. 重启服务,测试 

 6.3 基于端口的 Nginx 虚拟主机 

1. 修改主配置文件
vim nginx.conf
server {
        listen  192.168.136.100:8080;
        server_name  localhost;

        charset utf-8;

        access_log  logs/www.cxk.access.log;

        location / {
            root   /var/www/html/cxk;
            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;
        }
}
server {
        listen  192.168.136.200:8848;
        server_name  localhost;

        charset utf-8;

        access_log  logs/www.kun.access.log;

        location / {
            root   /var/www/html/kun;
            index  index.html index.htm;
        }
error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
2. 重启测试 

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

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

相关文章

STM32 cubeMX 呼吸灯实验

文章代码使用 HAL 库。 文章目录 一、1.PWM原理二、LED 原理图三、使用cubemx 配置 led四、PWM 相关函数五、PWM占空比占空比计算六、PWM 呼吸灯重要代码总结 呼吸灯 一、1.PWM原理 PWM全称为脉冲宽度调制&#xff08;Pulse Width Modulation&#xff09;&#xff0c;是一种常…

【Linux】进程通信之命名管道mkfifo

1.认识命名管道 匿名管道应用的一个限制就是只能在具有共同祖先&#xff08;具有亲缘关系&#xff09;的进程间通信。如果我们想在不相关的进程之间交换数据&#xff0c;可以使用FIFO文件来做这项工作&#xff0c;它经常被称为命名管道。命名管道是一种特殊类型的文件 2.在命…

华清远见嵌入式学习——QT——作业1

作业要求&#xff1a; 代码&#xff1a; ①&#xff1a;头文件 #ifndef LOGIN_H #define LOGIN_H#include <QWidget> #include <QLineEdit> //行编辑器类 #include <QPushButton> //按钮类 #include <QLabel> //标签类 #include <QM…

(五) Python 代理模式

文章目录 5.1 代理模式概述5.1.1 代理介绍5.1.2 代理模式的作用 5.2 代理模式的UML类图5.3 了解不同类型的代理5.3.1虚拟代理5.3.2 远程代理5.3.3 保护代理5.3.4 智能代理 5.4 现实世界中的代理模式5.5 代理模式的优点5.6 门面模式和代理模式之间的比较 5.1 代理模式概述 5.1.…

华为鸿蒙开发——开发及引用静态共享包(HAR)、应用配置文件

文章目录 简述一、创建HAR模块二、编译HAR模块三、应用配置文件&#xff08;Stage模型&#xff09;四、应用配置文件&#xff08;FA模型&#xff09;1、配置文件的内部结构&#xff08;1&#xff09;app&#xff08;2&#xff09;deviceConfig&#xff08;3&#xff09;module …

GDPU 数据结构 天码行空13

文章目录 一、【实验目的】二、【实验内容】三、实验源代码四、实验结果五、实验总结 一、【实验目的】 (1) 理解插入排序算法的实现过程&#xff1b; &#xff08;2&#xff09;理解不同排序算法的时间复杂度及适用环境&#xff1b; &#xff08;3&#xff09;了解算法性能…

高精度时钟芯片SD2405

概要 SD2405是一款非常优秀的RTC解决方案&#xff0c;为了能让用户在Arduino上有一款方便易用的时钟模块。该模块是一款内置晶振&#xff0c;支持IIC串行接口的高精度时钟模块&#xff1b;内置一次性工业级电池&#xff0c;可保证外部掉电的情况下&#xff0c;可以继续工作5~8…

华为数通方向HCIP-DataCom H12-831题库(多选题:161-180)

第161题 以下关于IS-IS路由渗透的描述,正确的有哪些项? A、若要配置Level-2区域的路由向Level-1区域渗透,则需要在Level-1设备上配置命令import-routeisis level_-2 into level_-1 B、缺省情况下,Level-2区域无Level-1区域的路由信息,需要通过在Level-1-2设备上配置impor…

3.PyTorch——常用神经网络层

import numpy as np import pandas as pd import torch as t from PIL import Image from torchvision.transforms import ToTensor, ToPILImaget.__version__2.1.13.1 图像相关层 图像相关层主要包括卷积层&#xff08;Conv&#xff09;、池化层&#xff08;Pool&#xff09;…

翻译: 生成式人工智能的经济潜力 第2部分行业影响 The economic potential of generative AI

麦肯锡报告 翻译: 生成式人工智能的经济潜力 第一部分商业价值 The economic potential of generative AI 1. 行业影响 在我们分析的63个使用案例中&#xff0c;生成式人工智能有潜力在各行各业创造2.6万亿至4.4万亿美元的价值。其确切影响将取决于各种因素&#xff0c;比如…

SpringBoot框架+原生HTML开发,基于云端SaaS服务方式的电子病历编辑器源码

一体化电子病历编辑器源码&#xff0c;电子病历系统 一体化电子病历系统基于云端SaaS服务的方式&#xff0c;采用B/S&#xff08;Browser/Server&#xff09;架构提供&#xff0c;覆盖了医疗机构电子病历模板制作到管理使用的整个流程。除实现在线制作内容丰富、图文并茂、功能…

MySQL主从复制(一主两从)架构搭建(阿里云服务器)

建立主机master 1.建立数据库master docker run --name master --restart always -p 3308:3306 -v /root/docker/volumes/etc/master:/etc/mysql -v /root/docker/volumes/var/lib/master:/var/lib/mysql -e MYSQL_ROOT_PASSWORDriCXT8zM -d mysql:latest 2.复制master的配置文…

讲一下maven的生命周期

Maven是一种强大的项目管理工具&#xff0c;它可以帮助开发者组织和管理项目的构建过程。Maven的生命周期指的是一系列的活动&#xff0c;包括如何创建、准备、构建和测试项目的过程。以下是对Maven生命周期的主要阶段的简要概述&#xff1a; 获取项目&#xff1a;在这个阶段&…

【开源】基于Vue+SpringBoot的智慧家政系统

项目编号&#xff1a; S 063 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S063&#xff0c;文末获取源码。} 项目编号&#xff1a;S063&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询家政服…

扩展卡尔曼滤波技术(Extended Kalman Filter,EKF)

一、概念介绍 卡尔曼滤波是一种高效率的递归滤波器(自回归滤波器), 它能够从一系列的不完全包含噪声的测量中&#xff0c;估计动态系统的状态&#xff0c;然而简单的卡尔曼滤波必须应用在符合高斯分布的系统中。 扩展卡尔曼滤波就是为了解决非线性问题&#xff0c;普通卡尔曼…

HashMap系列-resize

1.resize public class HashMap<K,V> extends AbstractMap<K,V>implements Map<K,V>, Cloneable, Serializable {final Node<K,V>[] resize() {Node<K,V>[] oldTab table;int oldCap (oldTab null) ? 0 : oldTab.length; //老的数组容量in…

【开源】基于Vue+SpringBoot的快乐贩卖馆管理系统

项目编号&#xff1a; S 064 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S064&#xff0c;文末获取源码。} 项目编号&#xff1a;S064&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 搞笑视频模块2.3 视…

用 PHP和html做一个简单的注册页面

用 PHP和html做一个简单的注册页面 index.html的设计 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title…

手眼标定 - 最终精度和误差优化心得

手眼标定 - 标定误差优化项 一、TCP标定误差优化1、注意标定针摆放范围2、TCP标定时的点次态与工作姿态尽可能保持相近 二、深度相机对齐矩阵误差1、手动计算对齐矩阵 三、拍照姿态1、TCP标定姿态优先2、水平放置棋盘格优先 为减少最终手眼标定的误差&#xff0c;可做或注意以下…

华为数通---配置Smart Link负载分担案例

定义 Smart Link&#xff0c;又叫做备份链路。一个Smart Link由两个接口组成&#xff0c;其中一个接口作为另一个的备份。Smart Link常用于双上行组网&#xff0c;提供可靠高效的备份和快速的切换机制。 目的 下游设备连接到上游设备&#xff0c;当使用单上行方式时&#x…