nginx网站服务

nginx:是一个高性能,轻量级web软件

1、稳定性高(没有Aapache稳定)  2、资源消耗比较低,体现在处理http请求的并发能力很高,单台物理服务器可以处理到3万-5万个请求

稳定:一般在企业中为了保持服务器稳定,并发量的设置在2万个左右,占用内存2M左右

nginx主要功能:1、静态文件服务:nginx可以直接提供静态文件服务,如HTML,CSS,JSP,图片(多种形态的静态文件)

2、反向代理:本身自己可以作为一个反向代理的服务器,将客户端的请求转发给后端多个服务器可以实现负载均衡

正向代理:(了解)

 特点:已知后端服务器,请求只会往固定的服务

反向代理:重点

 nginx服务器通过轮询算法随机发送给其中一台web服务器

3台web服务器组成的集群形成了负载均衡,其中坏了一台也没事

面试题:什么是反向代理

反向代理的核心:客户端在请求时,沟通代理服务器,会把请求的流量通过轮询算法转发到后台不同的服务器,实现负载均衡。

3、处理动态内容:nginx处理动态内容很差,要转发到后台可以处理动态的应用如PHP,nginx   可以代理请求,发送到后端的动态服务处理,动态服务器处理完之后再通过nginx把动态请求响应给客户端

4、可以实现SSL/TLS加密(HTTPS的加密方式)数字证书认证机制

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

6、URL重定向,可以实现灵活的URL重写和重定向,例子:想访问百度结果页面跳转到了新浪

7、缓存功能:nginx自带缓存功能

8、日志功能:可以详细的记录请求的信息,包括访问时间,请求路径,ip地址,响应状态

有助于故障排查(系统控制的日志记录在/var/log/messages,业务日志才会保存在自己的日志中)

access.log:记录谁访问了我

error.log:记录谁访问了我,但是记录的是访问失败的

总结:nginx的核心功能   1、静态文件服务  2、反向代理  3、缓存服务

nginx的主要应用场景:1、静态服务  2、反向代理,负载均衡  3、缓存服务  4、动态服务

面试题:nginx是如何实现高并发的?

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

2、nginx也是一个master进程,控制多个worker进程,master负责收集和分发请求,worker才是实际执行者,每一个请求进来时master就会拉起一个worker进程来处理请求

同时master进程也负责监控worker的状态,worker的数量要和cup一致或是两倍

worker在处理请求的过程中只受内存大小的限制所以可以处理多个请求再加上nginx本身就是轻量级的服务,处理请求时占用的内存本身就很少,所以可以起到大并发处理的能力

二者之间相互依赖,相互补充

在/usr/local/nginx路径下查看,有四个文件conf、html、logs、sbin

conf:保存所有nginx的配置文件,最核心的是nginx.conf

html:保存nginx的web文件,这个目录是默认目录可以改

html文件里面还有一个50x.html是nginx默认的错误页面提示

logs:保存日志文件

sbin:nginx二进制的启动脚本,可以结合不同参数进行使用

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

-v:查看nginx版本号

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

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

信号符:信号符结合kill命令

kill-USR1  pid号:日志分割       (pid号为nginx服务的pid号)

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

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

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

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

worker_process   工作进程,也就是worker进程的数量,和cpu数量一致或者是两倍

worker_connections  每个进程可以处理的最大连接数

面试题:修改linux服务器文件的最大打开数量

ulimit  -n  65535(文件打开的最大数量,linux只支持打开65535个文件)     临时修改

永久配置  vim  /etc/security/limit.conf

在最后一行插入  
* soft nproc 65535: 最大进程数软限制为 65535,即可以使用 ulimit -u 命令查看和修改的值。
* hard nproc 65535: 最大进程数硬限制为 65535,即最大可分配的进程数。
* soft nofile 65535:最大打开文件数软限制为 65535,即可以使用 ulimit -n 命令查看和修改的值。
* hard nofile 65535:最大打开文件数硬限制为 65535,即最大可分配的文件数。

这里使用的通配符 * 表示对所有用户生效。
最后要重启一下

面试题:

nginx中的conf配置文件:有几个模块,全局模块,event模块,http模块,在http模块中又包含了sever模块,location模块

event模块:配置影响nginx服务器与用户之间的网络连接

http模块:针对http请求的配置,代理,缓存,日志,反向代理,虚拟web主机,server模块

非http请求的方式,不能写在改模块中。反向代理:七层、四层反向代理,不能写在http模块

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

location模块:匹配的是uri

root和alias的区别:

root  拼接,root指定的目录和location匹配的uri之间做的一个拼接,/opt/ky30/这两个路径都要真实存在,而且都是目录,并且在uri目录里面要有web文件

alias:匹配指定路径下的web文件

root后面有没有/无所谓,加不加都可以     alias加了/,后面也必须要有/,否则匹配不到

/指向/usr/local/nginx/              root指向/usr/local/nginx/html/

root标签可以设置重定向,alias不可以设置重定向

proxy_pass:反向代理配置,也是写在location模块中

总结:全局模块,全局生效,所有模块,用户都生效

event模块:影响nginx和用户的网络连接问题

http模块:主要模块,配置代理,缓存,日志,反向代理,虚拟web主机,server模块

只能是http请求才能写在http模块中

sever模块:包含在http模块中,不能单独设置

location模块:匹配uri包含在server当中也不能单独设置

补充:proxy_pass:反向代理

stream:四层,走的是tcp或udp流量,不能写在http中,要写在全局配置中

upstream:反向代理指定服务器的命令,在http模块中

七层,基于ip和端口,走http协议,只能在http模块中

实验:

 安装依赖环境

 创建用户组

 把数据包拖进opt目录

 解压

 在源码包中进行编译

./configure --prefix=/usr/local/nginx \               指定安装路径
--user=nginx \                                                  指定属主
--group=nginx \                                                指定属组
--with-http_ssl_module \                                   http协议的加密模块
--with-http_v2_module \                                    安装http2.0模块
--with-http_realip_module \                               允许nginx获取客户端的真实ip地址
--with-http_stub_status_module \                      可以记录nginx访问状态信息的模块
--with-http_gzip_static_module \                         支持页面压缩功能
--with-pcre \                                                         支持pcre库
--with-stream \                                                        支持tcp/udp的加密模块 
--with-stream_ssl_module \                                       支持tcp/udp的加密模块
--with-stream_realip_module                       允许nginx作为代理服务器时可以获取客户端的ip

 安装一下

 修改权限把属主和属组都改成nginx

 nginx有四个文件    

1. conf:保存nginx所有的配置文件,其中nginx.conf是nginx服务器的最核心最主要的配置文件  .default是默认配置文件,改这些配置文件之前最好先做个备份      

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

3. logs:用来保存nginx服务器的访问日志错误日志等日志      

4. sbin:保存nginx二进制启动脚本

 nginx这个二进制文件添加到系统sbin默认路径下,让系统识别nginx的操作命令
nginx -t  检查配置文件是否配置正确
 

 查看nginx版本号

 添加Nginx系统服务

 因为我们知道了pid号的位置,指定到了/usr/local/nginx/conf/nginx.conf    所以要在nginx下创建一个run的目录

 修改配置文件,因为指定了pid号,所以pid的路径要改一下

 

 重启一下nginx服务,这个时候nginx服务安装完成

 

核心:nginx配置文件   面试会问                              

 我们说的配置文件指的是nginx.conf这个文件

面试题:如何修改linux服务器文件的最大打开数量

 

 临时修改,linux的最大文件打开数为65535 

永久修改

 修改配置文件,在最后一行添加  

 

 要用reboot重启一下才能生效

 查看一下修改是否成功

 全局模块

 http模块

 server模块

 location模块

 修改配置文件

 重启一下,发现404报错网页访问不了

实验一:访问状态统计

 

 

 访问统计的页面

 Active connections:1                           当前的活动连接数

server accepts handled requests        已经处理的连接信息

1:已经处理的连接数   1:已经成功进行三次握手的连接数    1:已经处理请求的连接数

Reading:0 Writing:1 Waiting:0              

正在进行连接保持的数     等待连接

多刷新几次发现变化的是已经处理请求的连接数

实验二:访问状态统计

基于用户名和密码的访问控制

 安装httppasswd工具    对http访问基于用户名和密码的控制  

 创建一个用户,密码设置为123

       修改passwd.db属主为nginx,只有root和nginx用户可以读

 

 修改权限只能读

 修改配置文件

添加认证配置

 

 重启服务

 这个时候就需要输入账户密码

实验三:基于ip地址的访问规则

 修改配置文件

 禁止192.168.88.10这个ip地址访问

实验四:基于域名的 Nginx 虚拟主机,基于一个服务器,创建多个主页

为虚拟主机提供域名解析

echo "192.168.10.19 www.kgc.com www.benet.com" >> /etc/hosts

为虚拟主机准备网页文档

mkdir -p /var/www/html/benet
mkdir -p /var/www/html/kgc
echo "<h1>www.kgc.com</h1>" > /var/www/html/kgc/index.html
echo "<h1>www.benet.com</h1>" > /var/www/html/benet/index.html

修改Nginx的配置文件

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.benet.com;    #设置域名www.benet.com
        charset utf-8;
        access_log logs/www.benet.access.log;
        location / {
            root /var/www/html/benet;
            index index.html index.php;
        }
        error_page 500 502 503 504 /50x.html;
        location = 50x.html{
            root html;
        }
    }    

 

 

重启服务,访问测试

systemctl restart nginx

浏览器访问

http://www.kgc.com
http://www.benet.com

 

 

实验五:基于nginx的虚拟ip主机

添加一张虚拟网卡

ifconfig ens33:0 192.168.146.21/24

 

修改Nginx的配置文件

vim /usr/local/nginx/conf/nginx.conf
......
http {
......
    server {
        listen 192.168.146.20:80;                    #设置监听地址192.168.146.20
        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;
        }1
    }
    
    server {
        listen 192.168.146.21:80;                    #设置监听地址192.168.146.21
        server_name www.benet.com;
        charset utf-8;
        access_log logs/www.benet.access.log; 
        location / {
            root /var/www/html/benet;
            index index.html index.php;
        }
        error_page 500 502 503 504 /50x.html;
        location = 50x.html{
            root html;
        }
    }    
}

 

 

重启服务,并测试访问

  1. systemctl restart nginx

  2. 浏览器访问

  3. http://192.168.146.20

  4. http://192.168.146.21

 

 

实验六:基于端口的 Nginx 虚拟主机

修改Nginx的配置文件

vim /usr/local/nginx/conf/nginx.conf
......
http {
......
    server {
        listen 192.168.146.20:666;                    #设置监听 666 端口
        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.146.20:888;                    #设置监听 888 端口
        server_name www.benet.com;
        charset utf-8;
        access_log logs/www.benet.access.log; 
        location / {
            root /var/www/html/benet;
            index index.html index.php;
        }
        error_page 500 502 503 504 /50x.html;
        location = 50x.html{
            root html;
        }
    }    
}

 

 

重启服务,并访问测试

systemctl restart nginx浏览器访问
http://192.168.146.20:666
http://192.168.146.20:888

 

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

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

相关文章

SpringBoot+AOP+Redission实战分布式锁

文章目录 前言一、Redission是什么&#xff1f;二、使用场景三、代码实战1.项目结构2.类图3.maven依赖4.yml5.config6.annotation7.aop8.model9.service 四、单元测试总结 前言 在集群环境下非单体应用存在的问题&#xff1a;JVM锁只能控制本地资源的访问&#xff0c;无法控制…

javaAPI(二):String、StringBuffer、StringBuilder

String、StringBuffer、StringBuilder的异同&#xff1f; String&#xff1a;不可变字符序列&#xff1b;底层结构使用char[]存储&#xff1b; StringBuffer&#xff1a;可变字符序列&#xff1b;线程安全的&#xff0c;效率低&#xff1b;底层结构使用char[]存储&#xff1b; …

快速搭建单机RocketMQ服务(开发环境)

一、什么是RocketMQ ​ RocketMQ是阿里巴巴开源的一个消息中间件&#xff0c;在阿里内部历经了双十一等很多高并发场景的考验&#xff0c;能够处理亿万级别的消息。2016年开源后捐赠给Apache&#xff0c;现在是Apache的一个顶级项目。 早期阿里使用ActiveMQ&#xff0c…

ClickHouse(十一):Clickhouse MergeTree系列表引擎 - MergeTree(1)

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,Kerberos安全认证,大数据OLAP体系技术栈-CSDN博客 &…

分治法、回溯法与动态规划

算法思想比较 回溯法&#xff1a;有“通用解题法”之称&#xff0c;用它可以系统地搜索问题的所有解。回溯法是按照深度优先搜索(DFS)的策略&#xff0c;从根结点出发深度探索解空间树分治法&#xff1a;将一个难以直接解决的大问题&#xff0c;分割成一些规模较小的相同问题&…

《Java-SE-第二十九章》之Synchronized原理与JUC常用类

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页&#xff1a;KC老衲爱尼姑的博客主页 博主的github&#xff0c;平常所写代码皆在于此 共勉&#xff1a;talk is cheap, show me the code 作者是爪哇岛的新手&#xff0c;水平很有限&…

Java基础面试题3

Java基础面试题 1&#xff1a;https://cloud.fynote.com/share/d/qPGzAVr5 2&#xff1a;https://cloud.fynote.com/share/d/MPG9AVsAG 3&#xff1a;https://cloud.fynote.com/share/d/qPGHKVsM 一、JavaWeb专题 1.HTTP响应码有哪些 1、1xx&#xff08;临时响应&#xf…

wonderful-sql 作业

Sql 作业 作业1&#xff1a; 答&#xff1a; create table Employee (Id integer not null, Name varchar(32) , Salary integer, departmentId integer, primary key (Id) );create table Department( Id integer primary key, Name varchar(30) not null );insert into emp…

Linux:在使用UEFI固件的计算机上内核是如何被启动的

前言 启动计算机通常不是一件难事&#xff1a;按下电源键&#xff0c;稍等片刻&#xff0c;你就能看到一个登录界面&#xff0c;再输入正确的密码&#xff0c;就可以开启一天的网上冲浪之旅了。 但偶尔这件事没那么顺利&#xff0c;有时候迎接你的不是熟悉的登录界面&#xf…

mysql8配置binlog日志skip-log-bin,开启、关闭binlog,清理binlog日志文件

1.概要说明 binlog 就是binary log&#xff0c;二进制日志文件&#xff0c;这个文件记录了MySQL所有的DML操作。通过binlog日志我们可以做数据恢复&#xff0c;增量备份&#xff0c;主主复制和主从复制等等。对于开发者可能对binlog并不怎么关注&#xff0c;但是对于运维或者架…

机器学习和深度学习简述

一、人工智能、机器学习、深度学习的关系 近些年人工智能、机器学习和深度学习的概念十分火热&#xff0c;但很多从业者却很难说清它们之间的关系&#xff0c;外行人更是雾里看花。概括来说&#xff0c;人工智能、机器学习和深度学习覆盖的技术范畴是逐层递减的&#xff0c;三…

Java Maven 构建项目里面有个聚合的概念

Java 项目里面有个聚合的概念&#xff0c;它没有.net里面解决方案(solution)的能力&#xff0c;可以统一的编译项目下的所有包&#xff0c;或设置统一的打包路径&#xff0c;使用maven编译后的产物也不会像.net那样编译到当前项目的bin文件夹下面&#xff0c;而是统一的生成到配…

无人驾驶实战-第五课(动态环境感知与3D检测算法)

激光雷达的分类&#xff1a; 机械式Lidar&#xff1a;TOF、N个独立激光单元、旋转产生360度视场 MEMS式Lidar&#xff1a;不旋转 激光雷达的输出是点云&#xff0c;点云数据特点&#xff1a; 简单&#xff1a;x y z i &#xff08;i为信号强度&#xff09; 稀疏&#xff1a;7%&…

WPF中自定义Loading图

纯前端方式&#xff0c;通过动画实现Loading样式&#xff0c;如图所示 <Grid Width"35" Height"35" HorizontalAlignment"Center" VerticalAlignment"Center" Name"Loading"><Grid.Resources><DrawingBrus…

【云原生】k8s组件架构介绍与K8s最新版部署

个人主页&#xff1a;征服bug-CSDN博客 kubernetes专栏&#xff1a;kubernetes_征服bug的博客-CSDN博客 目录 1 集群组件 1.1 控制平面组件&#xff08;Control Plane Components&#xff09; 1.2 Node 组件 1.3 插件 (Addons) 2 集群架构详细 3 集群搭建[重点] 3.1 mi…

从价值的角度看,为何 POSE 通证值得长期看好

PoseSwap 是 Nautilus Chain 上的首个 DEX&#xff0c;基于 Nautilus Chain 也让其成为了首个以模块化构建的 Layer3 架构的 DEX。该 DEX 本身能够以 Dapp 层&#xff08;Rollup&#xff09;的形态&#xff0c;与其他应用层并行化运行。

Linux之 Ubuntu 安装常见服务 (二) Tomcat

安装TomCat 服务 1、安装JDK环境 https://www.oracle.com/java/technologies/downloads/ 下载的官网 wget https://download.oracle.com/java/20/latest/jdk-20_linux-x64_bin.deb (sha256) 使用dpkg进行软件安装时&#xff0c;提示&#xff1a;dpkg&#xff1a;处理软件包XX…

Redis 总结【6.0版本的】

如果源码不编译&#xff0c;是无法实现自动跳转的&#xff0c; Redis在win上编译有点麻烦&#xff0c;我是使用的CentOS环境&#xff0c;Clion编译 编译完就可以直接通过shell连接Redis server了 server.c 中放的是就是主类 &#xff1a;6000多行左右是入口main()函数位置 Red…

三个主流数据库(Oracle、MySQL和SQL Server)的“单表造数

oracle 1.创建表 CREATE TABLE "YZH2_ORACLE" ("VARCHAR2_COLUMN" VARCHAR2(20) NOT NULL ENABLE,"NUMBER_COLUMN" NUMBER,"DATE_COLUMN" DATE,"CLOB_COLUMN" CLOB,"BLOB_COLUMN" BLOB,"BINARY_DOUBLE_COLU…

【Docker】Docker容器数据卷、容器卷之间的继承和DockerFIle的详细讲解

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;陈童学哦&#xff0c;目前学习C/C、算法、Python、Java等方向&#xff0c;一个正在慢慢前行的普通人。 &#x1f3c0;系列专栏&#xff1a;陈童学的日记 &#x1f4a1;其他专栏&#xff1a;CSTL&…