首页 > 系统相关 >Nginx常用操作

Nginx常用操作

时间:2024-07-08 21:10:04浏览次数:15  
标签:常用 http 请求 nginx server Nginx 操作 服务器

Nginx

Nginx的最重要的几个使用场景

  • 静态资源服务,通过本地文件提供服务
  • 反向代理服务,延伸出包括缓存,负载均衡等
  • API服务,OpenResty

相关概念

简单请求和非简单请求

  1. 请求方法是HEAD,GET,POST三种之一
  2. HTTP 头信息不超过右边着几个字段:Accept、Accept-Language、Content-Language、Last-Event-ID
    Content-Type 只限于三个值 application/x-www-form-urlencodedmultipart/form-datatext/plain

凡是不同时满足这两个条件的,都属于非简单请求

浏览器处理简单请求和非简单请求的方式不一样:

简单请求:

对于简单请求,浏览器会在头信息中增加 Origin 字段后直接发出,Origin 字段用来说明,本次请求来自的哪个源(协议+域名+端口)。

如果服务器发现 Origin 指定的源不在许可范围内,服务器会返回一个正常的 HTTP 回应,浏览器取到回应之后发现回应的头信息中没有包含 Access-Control-Allow-Origin 字段,就抛出一个错误给 XHR 的 error 事件;

如果服务器发现 Origin 指定的域名在许可范围内,服务器返回的响应会多出几个 Access-Control- 开头的头信息字段。

非简单请求

非简单请求是那种对服务器有特殊要求的请求,比如请求方法是 PUT 或 DELETE,或 Content-Type 值为 application/json。浏览器会在正式通信之前,发送一次 HTTP 预检 OPTIONS 请求,先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些 HTTP 请求方法和头信息字段。只有得到肯定答复,浏览器才会发出正式的 XHR 请求,否则报错。

跨域

在浏览器上当前访问的网站向另一个网站发送请求获取数据的过程就是跨域请求。

跨域是浏览器的同源策略决定的,是一个重要的浏览器安全策略,用于限制一个origin的文档或者它加载的脚本与另一个源的资源进行交互,它能够帮助租个恶意文档,减少可能被攻击的媒介,可以使用CORS配置解除这个限制。

正向代理和反向代理

反向代理:使用反向代理后,直接收到请求的服务器是代理服务器,然后将请求转发给内部网络上真正进行处理的服务器,得到的结果返回给客户端。反向代理隐藏了真实的服务器,为服务器发送请求。一般在处理跨域时比较常用

负载均衡

请求爆发式增长的情况下,单个机器性能再强也无法满足要求了,这个时候集群的概念产生了,单个服务器解决不了问题,可以使用多个服务器,然后将请求分发到各个服务器上,将负载分发到不同的服务器。Nginx实现负载均衡,一般来说指的是将请求转发给服务器集群。

Nginx安装

yun install nginx

nginx -V 查看Nginx版本信息

systemctl start firewalld  # 开启防火墙
systemctl stop firewalld   # 关闭防火墙
systemctl status firewalld # 查看防火墙开启状态,显示running则是正在运行
firewall-cmd --reload      # 重启防火墙,永久打开端口需要reload一下

# 添加开启端口,--permanent表示永久打开,不加是临时打开重启之后失效
firewall-cmd --permanent --zone=public --add-port=8888/tcp

# 查看防火墙,添加的端口也可以看到
firewall-cmd --list-all

设置Nginx开机启动

systemctl enable nginx

启动Nginx

systemctl start nginx

Nginx操作常用命令

Nginx 的命令在控制台中输入 nginx -h 就可以看到完整的命令,这里列举几个常用的命令:

nginx -s reload  # 向主进程发送信号,重新加载配置文件,热重启
nginx -s reopen	 # 重启 Nginx
nginx -s stop    # 快速关闭
nginx -s quit    # 等待工作进程处理完成后关闭
nginx -T         # 查看当前 Nginx 最终的配置
nginx -t -c     # 检查配置是否有问题,如果已经在配置目录,则不需要-c

systemctl 是 Linux 系统应用管理工具 systemd 的主命令,用于管理系统,我们也可以用它来对 Nginx 进行管理,相关命令如下:

systemctl start nginx    # 启动 Nginx
systemctl stop nginx     # 停止 Nginx
systemctl restart nginx  # 重启 Nginx
systemctl reload nginx   # 重新加载 Nginx,用于修改配置后
systemctl enable nginx   # 设置开机启动 Nginx
systemctl disable nginx  # 关闭开机启动 Nginx
systemctl status nginx   # 查看 Nginx 运行状态

nginx配置

nginx 的典型配置

user  nginx;                        # 运行用户,默认即是nginx,可以不进行设置
worker_processes  1;                # Nginx 进程数,一般设置为和 CPU 核数一样
error_log  /var/log/nginx/error.log warn;   # Nginx 的错误日志存放目录
pid        /var/run/nginx.pid;      # Nginx 服务启动时的 pid 存放位置

events {
    use epoll;     # 使用epoll的I/O模型(如果你不知道Nginx该使用哪种轮询方法,会自动选择一个最适合你操作系统的)
    worker_connections 1024;   # 每个进程允许最大并发数
}

http {   # 配置使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置
    # 设置日志模式
    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;   # Nginx访问日志存放位置

    sendfile            on;   # 开启高效传输模式
    tcp_nopush          on;   # 减少网络报文段的数量
    tcp_nodelay         on;
    keepalive_timeout   65;   # 保持连接的时间,也叫超时时间,单位秒
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;      # 文件扩展名与类型映射表
    default_type        application/octet-stream;   # 默认文件类型

    include /etc/nginx/conf.d/*.conf;   # 加载子配置项
    
    server {
    	listen       80;       # 配置监听的端口
    	server_name  localhost;    # 配置的域名
    	
    	location / {
    		root   /usr/share/nginx/html;  # 网站根目录
    		index  index.html index.htm;   # 默认首页文件
    		deny 172.168.22.11;   # 禁止访问的ip地址,可以为all
    		allow 172.168.33.44; # 允许访问的ip地址,可以为all
    	}
    	
    	error_page 500 502 503 504 /50x.html;  # 默认50x对应的访问页面
    	error_page 400 404 error.html;   # 同上
    }
}

server块可以包含多个Location块,Location指令用于配置uri,语法:

location  [ = | ~ | ~* | ^~] uri {
	...
}

指令后面:

  • =精确匹配路径,用于不含正则表达式的uri前,如果匹配成功,不再进行后续的查找
  • ^~用于处理不含正则表达式的uri前,如果该符号后面的字符是最佳匹配,采用该规则,不再进行后续的查找。
  • ~ 表示用该符号后面的正则去匹配路径,区分大小写。
  • ~*表示用该符号后面的去正则匹配路径,不区分大小写。跟~优先级都比较低

配置反向代理

反向代理是工作中最常用的服务器功能,经常被用来解决跨域问题。

  • 首先进入Nginx的主配置文件Nginx.conf
  • 为了看起来方便,把行号显示出来:set nu
  • 然后我们去 http 模块的 server 块中的 location /,增加一行将默认网址重定向到最大学习网站 Bilibili 的 proxy_pass 配置

    标签:常用,http,请求,nginx,server,Nginx,操作,服务器
    From: https://www.cnblogs.com/2678066103hs/p/18290688

相关文章

  • MySQL数据库基本操作-DDL和DML
    1.DDL解释DDL(DataDefinitionLanguage),数据定义语言,该语言部分包括以下内容:对数据库的常用操作对表结构的常用操作修改表结构2.对数据库的常用操作功能SQL查看所有的数据库showdatabases;查看有印象的数据库show databaseslike'_xx%'(_一个字符;%任意字符)创建数据......
  • 第三章 MATLAB矩阵的操作的目录【向量元素的引用】
    向量元素的引用有两种:(1)提取向量中的单个元素(2)提取向量中的多个元素可以利用向量中包含的元素个数来描述一个向量的大小。在MATLAB中,使用length函数或numel函数来计算向量中包含的元素个数。向量的元素a1a2a3......an索引(下标)123n在MATLAB中,向量......
  • Docker容器的基本操作
    1容器操作添加容器的两种方法会自动添加生成一个随机名字#启动dockersystemctlstatusdockersystemctlstartdockersystemctldaemon-reload#重新加载docker配置systemctlrestartdocker#重启docker#1镜像操作 -dockersearch -dockerpull......
  • 【操作系统】进程管理——进程的同步与互斥(个人笔记)
    学习日期:2024.7.8内容摘要:进程同步/互斥的概念和意义,基于软/硬件的实现方法进程同步与互斥的概念和意义为什么要有进程同步机制?回顾:在《进程管理》第一章中,我们学习了进程具有异步性的特征,即各个并发执行的进程以各自独立、不可预知的速度向前推进。但是,有的情况下,我们希......
  • python C API常用函数介绍
    PythonCAPI提供了一组函数和宏,允许开发者在C或C++代码中与Python解释器进行交互。以下是一些常用的PythonCAPI函数和宏:1.**初始化和结束Python解释器**:-`Py_Initialize()`:初始化Python解释器。-`Py_Finalize()`:结束Python解释器。-`Py_SetProgramNam(cons......
  • 常用的一些git命令与讲解,看看你还有哪些不知道
    Git是一个分布式的版本控制系统,用作Linux内核代码的管理,Git同样可以作为部署工具所使用。GitHub的独特在于从另外一个项目进行分支的简易性。为一个项目贡献代码非常简单:首先点击项目站点的“fork”的按钮,然后将代码检出并将修改加入到刚才分出的代码库中,最后通过内建......
  • 为啥 两个线程同时执行 ++i,可能会导致其中一个线程的自增操作被覆盖
    这是一个典型的并发编程问题,涉及到线程的同步和共享资源的访问问题。让我们详细来看一下为什么会这样:自增操作的细节++i 看起来是一个简单的操作,但实际上它包含了多个步骤:读取变量 i 的当前值。将读取到的值加1。将结果写回变量 i。在单线程环境中,这些步骤会顺序执......
  • 力扣常用c++操作
    数字转字符串to_string()自定义sort函数sort(intervals.begin(),intervals.end(),[](vector<int>&v1,vector<int>&v2){returnv1[0]<v2[0];});自定义二分查找autoinsertit=lower_bound(intervals.begin(),intervals.end(),newInterval[0],......
  • 学习canvas(一些常用api)
    当然,以下是这些常用CanvasAPI的总结,按照Markdown格式编写:常用CanvasAPI总结1.获取绘图上下文constcanvas=document.getElementById('myCanvas');constctx=canvas.getContext('2d');//或'webgl'2.绘制矩形ctx.fillStyle='blue';ctx.fillRect(1......
  • MYSQL常用SQL语句
    数据库概述1、什么是数据库管理系统?数据管理系统是一种在数据库中组织和存储数据的软件应用程序。常见的数据库管理系统分为两大类:关系型数据管理系统和非关系型管理系统关系型数据库:MySQL、Oracle、SQLServer、Access非关系型数据库:MongoDB2、什么是数据库?数据库(Databas......