Nginx:网站服务

news2024/11/26 21:08:18

目录

绪论

1、nginx的主要功能

1.1 静态文件服务

1.2 反向代理

1.3 处理动态内容

1.4 实现SSL和TLS加密

1.5 虚拟主机

1.6 URL重定向

1.7 缓存功能

1.8 日志功能

2、nginx如何实现高并发

3、同步,异步,阻塞,非阻塞的概念补充

4、Nginx为什么不使用多线程?

5、实验

5.1 安装nginx服务

5.2 信号符

6、全局配置的六个模块简介

7、Nginx的四大模块

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

9、访问状态统计配置

10、基于IP地址的访问规则

11、虚拟主机,创建多个虚拟主机,基于一个服务器创建多个主页

12、虚拟IP地址创建

13、基于端口的虚拟主机


绪论

nginx:一款高性能、轻量级Web服务软件

特点:稳定性高,系统资源消耗低(处理http的并发能力高,单台物理服务器可支持30000~50000个并发请求。)

稳定:一般在企业中为了保持服务器的稳定,并发量都会设置在20000个左右

1、nginx的主要功能

1.1 静态文件服务

Nginx 可以直接提供静态文件的服务,例如 HTML、CSS、JavaScript、图像等。
它能够高效地处理并响应静态文件的请求。

1.2 反向代理

Nginx 可以作为反向代理服务器,将客户端的请求转发给后端的多个服务器。
它可以实现负载均衡、高可用性和故障转移,提供更好的性能和可靠性。

反向代理的核心:客户端请求时通过代理服务按照轮询算法转发到后台不同的服务器实现负载均衡和高可用

1.3 处理动态内容

Nginx可以与后端应用服务器(如 PHP-FPM、Node.js、Java 应用服务器等)配合使用,
实现动态内容的处理和执行。它可以代理动态请求,并将请求的结果返回给客户端。

1.4 实现SSL和TLS加密

可以实现SSL和TLS加密,就是HTTPS的加密方式,数字证书验证机制

1.5 虚拟主机

nginx可以在一台服务器上设置多个虚拟主机,同一个服务器上可以有多个域名和站点

1.6 URL重定向

Nginx 支持灵活的 URL 重写和重定向规则,可以对请求的 URL 进行修改和重定向,
实现 URL 的美化和重定向策略。

1.7 缓存功能

nginx自带缓存功能,可以缓存静态文件和动态内容,以减轻后端服务器的负载并提供更快的响应速度。

1.8 日志功能

可以详细的记录请求的信息,包括访问时间、请求路径、IP地址、响应状态等。有助于故障排查(系统控制的日志记录在/var/log/messages)(access.log:记录谁访问了我,都是访问成功的记录   error:记录访问失败的目录)

nginx的主要应用场景:tail  -f  /usr/local/nginx/logs/error.log

· 静态服务   · 反向代理,负载均衡  · 缓存服务  · 动态服务

2、nginx如何实现高并发

· nginx自身代码的问题,大量的底层代理进行了优化,用时子代理一个功能模块。epoll模块,支持高并发

· nginx也是采用一个master进程控制多个woker进程的模式。
master进程主要负责收集、分发请求。
每当一个请求过来时,master就拉起一个worker进程负责处理这个请求。
同时master进程负责收集和分发请求,worker是实际执行者。每个请求进来master就会拉起一个work进程处理请求,同时master进程也负责监控worker的状态,worker处理请求和cpu要一致或者是cpu的两倍。worker处理请求的过程中只受内存大小的限制,所以就可以处理多个请求,再加上nginx本身就是轻量级的服务,处理请求时占用很少内存,所以可以起到大并发处理的能力

3、同步,异步,阻塞,非阻塞的概念补充

同步:一个服务的完成需要依赖其他服务时,只有等待被依赖的服务完成后,才算完成,
这是一种可靠的服务序列。
要么成功都成功,失败都失败,服务的状态可以保持一致

异步:一个服务的完成需要依赖其他服务时,只通知其他依赖服务开始执行,而不需要等待被依赖的服务完成,
此时该服务就算完成了。被依赖的服务是否最终完成无法确定,因此它是一个不可靠的服务序列。

阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务,
函数只有在得到结果之后才会返回。

非阻塞:非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。

4、Nginx为什么不使用多线程?


Apache: 创建多个进程或线程,而每个进程或线程都会为其分配 cpu 和内存(线程要比进程小的多,所以worker支持比perfork高的并发),并发过大会耗光服务器资源。

Nginx: 采用单线程来异步非阻塞处理请求(管理员可以配置Nginx主进程的工作进程的数量)(epoll),不会为每个请求分配cpu和内存资源,节省了大量资源,同时也减少了大量的CPU的上下文切换。所以才使得Nginx支持更高的并发。

5、实验

systemctl stop firewalld
setenforce 0

所有实验开始前关闭防火墙和安全机制

5.1 安装nginx服务

· 把nginx的安装包拖进来(/opt)

· 安装依赖包:
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel

· 创建运行用户、组
(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)
useradd -M -s /sbin/nologin nginx

· 编译安装Nginx

cd /opt
tar zxvf nginx-1.22.0.tar.gz -C /opt/

cd nginx-1.22.0/


./configure --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module

解释:

· make -j 4 && make install使用这个命令而不是使用make && make install因为速度更快

· 修改权限

chown -R nginx.nginx /usr/local/nginx

· cd  /usr/local/nginx/conf

解释:

 · 让系统识别nginx的操作命令

ln -s /usr/local/nginx/sbin/nginx /usr/sbin/

注释:nginx常用命令

nginx -t 检查配置文件是否配置正确

nginx -v 查看nginx的版本号

nginx -s 向主进程传输信号,停止、开启、重启、重新加载

nginx -c 设置配置文件的默认路径

· 添加Nginx系统服务
vim /lib/systemd/system/nginx.service

写入:
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/run/nginx.pid

· 创建目录

mkdir -p /usr/local/nginx/run/
· 修改配置文件

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

 保运退出

· 重新加载配置 

systemctl daemon-reload 

 chown -R nginx.nginx /usr/local/nginx

· 启动nginx

systemctl start nginx.service

5.2 信号符

信号符结合kill命令使用

kill  -USR1  pid号:日志分割

kill  -s  HUP  pid号:只要是kill只能跟pid号,重新加载

killall  -s  HUP  nginx:可以跟服务名,也可以用pid号

kill  -s  QUIT  pid号:优雅退出,有人访问的时候不会结束进程。访问完了才会结束进程

kill  -s  WINCH  pid号:优雅地结束worker,直到请求完成才结worker进程

6、全局配置的六个模块简介

全局块:全局配置,对全局生效;
events块:配置影响 Nginx 服务器与用户的网络连接;

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

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

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

7、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 块来配置流的处理规则,
可以根据目标地址和端口等条件进行流量的转发和处理。

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

ginx是通过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 则对 ”/” 可有可无

小结:

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

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

9、访问状态统计配置

yum  -y  install  httpd-tools

htpasswd  -c  /usr/local/nginx/passwd.db  lt

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

进入编辑:

http {
......前面省略,到下面
    server {
        listen 80;
        server_name www.kgc.com;
        charset utf-8;
        location / {
            root html;
            index index.html index.php;
        }
        ##添加 stub_status 配置##
        location /status {                     #访问位置为/status
            stub_status on;                 #打开状态统计功能
            access_log off;                 #关闭此位置的日志记录
        }
    }
}

保存退出

systemctl restart nginx

到浏览器:20.0.0.30/status  统计连接状态

10、基于IP地址的访问规则

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

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

 systemctl  restart  nginx

curl  192.168.233.10

11、虚拟主机,创建多个虚拟主机,基于一个服务器创建多个主页

为虚拟主机准备网页文档
mkdir -p /var/www/html/kgc
mkdir -p /var/www/html/accp
echo "<h1>www.kgc.com</h1>" > /var/www/html/kgc/index.html
echo "<h1>www.accp.com</h1>" > /var/www/html/accp/index.html
修改Nginx的配置文件:
vim /usr/local/nginx/conf/nginx.conf

进入之后进行匹配修改添加

http {
......
    server {
        listen 80;
        server_name www.kgc.com;                    #设置域名www.kgc.com
        charset utf-8;
        access_log logs/www.kgc.access.log; 
        location / {
            root /var/www/html/kgc;                    #设置www.kgc.com 的工作目录
            index index.html index.php;
        }
        error_page 500 502 503 504 /50x.html;
        location = 50x.html{
            root html;
        }
    }
    
    server {
        listen 80;
        server_name www.accp.com;                    #设置域名www.accp.com
        charset utf-8;
        access_log logs/www.accp.access.log; 
        location / {
            root /var/www/html/accp;
            index index.html index.php;
        }
        error_page 500 502 503 504 /50x.html;
        location = 50x.html{
            root html;
        }
    }    
}

保存退出

 systemctl  restart  nginx

进入虚拟机浏览器访问www.kgc.com     www.accp.com

12、虚拟IP地址创建

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


......
http {
......
server {
        listen 192.168.233.21:80;                    #设置监听地址
        server_name www.kgc.com;
        charset utf-8;
        access_log logs/www.kgc.access.log; 
        location / {
            root /var/www/html/kgc;
            index index.html index.php;
        }
        error_page 500 502 503 504 /50x.html;
        location = 50x.html{
            root html;
        }
    }

server {
    listen 192.168.233.33:80;                    #设置监听地址
    server_name www.accp.com;
    charset utf-8;
    access_log logs/www.accp.access.log; 
    location / {
        root /var/www/html/accp;
        index index.html index.php;
    }
    error_page 500 502 503 504 /50x.html;
    location = 50x.html{
        root html;
    }
}    
}
systemctl restart nginx

浏览器:192.168.233.33:80

13、基于端口的虚拟主机

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

......
http {
......
    server {
        listen 192.168.233.21:8080;                    #设置监听 8080 端口
        server_name www.kgc.com;
        charset utf-8;
        access_log logs/www.kgc.access.log; 
        location / {
            root /var/www/html/kgc;
            index index.html index.php;
        }
        error_page 500 502 503 504 /50x.html;
        location = 50x.html{
            root html;
        }
    }

server {
    listen 192.168.233.21:8888;                    #设置监听 8888 端口
    server_name www.accp.com;
    charset utf-8;
    access_log logs/www.accp.access.log; 
    location / {
        root /var/www/html/accp;
        index index.html index.php;
    }
    error_page 500 502 503 504 /50x.html;
    location = 50x.html{
        root html;
    }
}    
systemctl restart nginx

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

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

相关文章

安卓源码分析(10)Lifecycle实现组件生命周期管理

参考&#xff1a; https://developer.android.google.cn/topic/libraries/architecture/lifecycle?hlzh-cn#java https://developer.android.google.cn/reference/androidx/lifecycle/Lifecycle 文章目录 1、概述2、LifeCycle类3、LifecycleOwner类4、LifecycleObserver类 1、…

二、Qt的安装(Linux系统下安装Qt6过程)

一、Qt资源下载网址 网址&#xff1a;点击下载http://download.qt.io/ 下载&#xff1a;点击下载(CSDN) 二、下载二进制安装包 进入Qt资源下载网址&#xff0c;进入对应的资源目录&#xff0c;找对应系统平台的二进制安装包选择进行下载&#xff0c;在这这里我们选择Linux下的二…

MobaXterm

MobaXterm 简介下载安装 简介 MobaXterm 是一个功能强大的远程计算机管理工具&#xff0c;它集成了多种网络工具和命令行工具&#xff0c;用于在 Windows 系统上轻松进行远程访问、文件传输、X11 服务器和终端模拟等任务。MobaXterm 提供了一个集成的环境&#xff0c;使系统管…

【C# 基础精讲】继承、封装、多态

继承&#xff08;Inheritance&#xff09;、封装&#xff08;Encapsulation&#xff09;和多态&#xff08;Polymorphism&#xff09;是面向对象编程中的三大核心概念&#xff0c;它们构成了面向对象编程的基础&#xff0c;有助于创建更加模块化、可扩展和可维护的代码。这三个…

SpringBoot系列之基于Jersey实现文件上传API

前言 JAX-RS&#xff1a;JAX-RS是可以用可以用于实现RESTFul应用程序的JAVA API&#xff0c;给开发者提供了一系列的RESTFul注解Jersey&#xff1a;是基于JAX-RX API的实现框架&#xff0c;用于实现RESTful Web 服务的开源框架。 JAX-RX常用的注解&#xff1a; javax.ws.rs.Pa…

链表OJ详解

题目一&#xff1a; 题目要求&#xff1a; 画图分析&#xff1a; 代码实现&#xff1a; struct ListNode* removeElements(struct ListNode* head, int val){struct ListNode*prev NULL,*cur head;//遍历while(cur){if(cur->val val)//相等{if(cur head)//头删{head…

ubuntu22.04+cuda11.5+gcc11.4第一个cuda程序示例

VisualStudio 2019是微软的集成开发环境(IDE)&#xff0c;通常在Windows操作系统上使用。然而&#xff0c;并不直接支持在Linux上安装。如果想在Ubuntu上进行开发&#xff0c;可以考虑以下几个选项: 使用替代的IDE或文本编辑器: Ubuntu上有许多适用于C等编程语言的开发工具&…

【必看】时序逻辑仿真成组合逻辑?你知道原因吗?

对于初学者&#xff0c;一般会遇到这种情况&#xff0c;明明写的时序逻辑&#xff0c;结果仿真结果却是组合逻辑&#xff0c;然后看遍设计代码&#xff0c;始终找不到原因&#xff0c;交流群、知乎这种问题随处可见。但不要怀疑软件问题&#xff0c;modelsim这些专用软件基本不…

【100天精通python】Day33:使用python操作数据库_SQLite数据库的使用与实战

目录 专栏导读 1 SQLite 简介 2 SQLite数据库安装及使用 2.1 检查 SQLite 支持 2.2 创建数据库文件 2.2.1 使用 Python 创建数据库文件&#xff1a; 2.2.2 使用命令行创建数据库文件&#xff1a; 2.3 连接到 SQLite 数据库&#xff1a; 3 SQLite 中常用的SQL语句…

WebRTC音视频通话-实现iOS端调用ossrs视频通话服务

WebRTC音视频通话-实现iOS端调用ossrs视频通话服务 之前搭建ossrs服务&#xff0c;可以查看&#xff1a;https://blog.csdn.net/gloryFlow/article/details/132257196 这里iOS端使用GoogleWebRTC联调ossrs实现视频通话功能。 一、iOS端调用ossrs视频通话效果图 iOS端端效果图…

HTML详解连载(7)

HTML详解连载&#xff08;7&#xff09; 专栏链接 [link](http://t.csdn.cn/xF0H3)下面进行专栏介绍 开始喽结构伪类选择器作用 :nth-child&#xff08;公式&#xff09;作用举例 伪元素选择器作用注意&#xff1a; PxCoook作用盒子模型-重要组成部分 盒子模型-边框线属性名属性…

Java-运算符和控制语句(上)(基于c语言的补充)

算术运算符 关于求余 不管分子&#xff0c;分母是正还是负&#xff0c;对于分母&#xff0c;直接取正&#xff1b;对于分子若有负号&#xff0c;则先提取出来&#xff1b;剩下两个正的分子分母运算&#xff1b;最后&#xff0c;若刚才的分子有负号&#xff0c;对最后的结果添加…

fork:创建一个子进程

函数原型&#xff1a;pid_t fork&#xff08;void&#xff09;&#xff1b; 返回值&#xff1a; 成功&#xff1a;返回子进程id给附近父进程&#xff0c;返回0给子进程 失败&#xff1a;返回-1&#xff0c;并且设置错误号&#xff0c;同时子进程不会被创建 注意&#xff1…

C++ QT(一)

目录 初识QtQt 是什么Qt 能做什么Qt/C与QML 如何选择Qt 版本Windows 下安装QtLinux 下安装Qt安装Qt配置Qt Creator 输入中文配置Ubuntu 中文环境配置中文输入法 Qt Creator 简单使用Qt Creator 界面组成Qt Creator 设置 第一个Qt 程序新建一个项目项目文件介绍项目文件*.pro样式…

锁与原子操作的底层原理

偏向锁 在一个系统当中&#xff0c;大部分时间都不存在并发问题&#xff0c;但频繁的加锁释放锁又会占用大量系统资源。因此为了让线程获得锁的代价更低而引入了偏向锁。 获得偏向锁 1&#xff09;检查该锁是否被当前线程持有 2&#xff09;通过CAS操作修改对象头 3&#…

python环境下载安装教程,python运行环境怎么下载

本篇文章给大家谈谈python安装步骤以及环境变量配置&#xff0c;以及下载python需要设置环境变量吗&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 1.https://www.python.org/downloads/windows/ 下载适合自己电脑的python安装包 2.下载后安装即可 3.配置环…

Vue中如何更好地封装组件?

子组件接受父组件传递的事件 1.子组件使用事件名"$emit(父组件中传递的事件名,想给父组件传递的参数(可选))" click"$emit(click)" 2.子组件使用 v-on"$listeners" 父组件&#xff1a; <template><div id"app"><myCo…

Ceph分布式存储系统优化分析

Ceph支持多种存储访问接口&#xff0c;现有的多种性能测试工具都可用于Ceph的性能测试&#xff0c;如测试块接口性能的fio&#xff0c;iometer等&#xff1b;测试CephFS接口的filebench&#xff0c;fio等;测试对象接口的cosbench等。Ceph有专用的基准测试集CBT&#xff0c;其包…

并查集的原理与实现

1.概念 2.生活中的例子 小弟-老大&#xff1b; 帮派识别 3.实现 3.1 初始化 3.2 中间过程 3.3合并 3.4 并查集路径优化 直接把下面的节点指向最终的老大。 3.5 伪代码实现 3.6JAVA实现 findRoot: 谁是帮派的老大。例如山鸡的老大是陈浩南 connected: 我们是不是同一个大…

【机器学习 | 数据预处理】 提升模型性能,优化特征表达:数据标准化和归一化的数值处理技巧探析

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…