综合架构web服务之nginx详解,2024年最新前端开发岗位要求

  • 在这里插入图片描述
2.5.2 location介绍、location 访问控制及 优雅404显示
  • location 介绍:

允许根据用户请求的URI来匹配定义的各location,匹配到时,此请求将被相应的location配置块中的配置所处理,例如做访问控制等功能

= 精确匹配

location = /hbs

~ 正则表达式,区分大消息

location ~ ^/hbs$

~* 不区分大小写

location ~* ^/hbs$

匹配顺序:

带有=的精确匹配优先

正则表达式按照他们在配置文件中定义的顺序

带有^~修饰符的,开头匹配

  • 在这里插入图片描述

  • location 访问控制

用于location段

allow:设定允许哪台或哪些主机访问,多个参数间用空格隔开

deny:设定禁止哪台或哪些主机访问,多个参数间用空格隔开

示例:

allow 192.168.1.1/32 172.16.0.0/16;

deny all;

放行了10.0.0.81/32 172.16.0.0/16,拒绝了其它ip地址

location /hbs {

root /usr/share/nginx/html;

index hbs.html;

allow 10.0.0.81/32 172.16.0.0/16

deny all

}

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 补充:访问策略配置写法

写法1:

server {

listen 80;

server_name www.hbs.com;

root /html/www;

index index.html;

location /AV {

deny 10.0.0.0/24;

allow 172.16.1.0/24;

}

}

写法2:

server {

listen 80;

server_name www.hbs.com;

location / {

root /html/www;

index index.html;

}

location /AV {

deny 10.0.0.0/24;

allow 172.16.1.0/24;

root /html/www;

index index.html;

}

}

补充:

location外面的信息, 全局配置信息

location里面的信息, 局部配置信息

  • 优雅界面404 显示
2.5.3 利用nginx服务搭建一个多网站(www、 love、 blog)
  • 第一步:创建三个配置文件

[root@web_server01/etc/nginx/conf.d]# ls

bbs.conf blog.conf default.conf default.conf.bak www.conf

www.conf 配置文件

[root@web_server01/etc/nginx/conf.d]# cat www.conf

server {

listen 80;

server_name www.hbs.com;

location / {

root /usr/share/nginx/html/www;

index index.html;

}

}

bbs.conf 配置文件

[root@web_server01/etc/nginx/conf.d]# cat bbs.conf

server {

listen 80;

server_name bbs.hbs.com;

location / {

root /usr/share/nginx/html/bbs;

index index.html;

}

}

blog.conf 配置文件

[root@web_server01/etc/nginx/conf.d]# cat blog.conf

server {

listen 80;

server_name blog.hbs.com;

location / {

root /usr/share/nginx/html/blog;

index index.html;

}

}

[root@web_server01/etc/nginx/conf.d]#

  • 第二步:创建站点目录和目录中首页文件

常见站点目录

[root@web_server01~]# mkdir -p /usr/share/nginx/html/{www,bbs,blog}

创建站点首页文件

[root@web_server01/usr/share/nginx/html]# ls

50x.html bbs blog index.html www

[root@web_server01/usr/share/nginx/html]# cat www/index.html

我的第一个html

大家好!我是黄昏

10.0.0.7 www.hbs.com

……

重启 nginx

[root@web_server01~]# systemctl stop nginx

[root@web_server01~]# systemctl start nginx

  • 添加hosts 文件:

  • 在这里插入图片描述

  • 测试

  • 在这里插入图片描述

2.5.4 企业中虚拟主机 访问方式
  • 基于域名的方式方式进行访问

  • 基于地址的方式进行访问(只能用指定地址访问)—负载均衡+高可用服务

server {

listen 10.0.0.7:80; # 填写地址

server_name www.hbs.com;

location / {

root /html/www;

index index.html;

}

}

配置完毕了,需要关闭/重启nginx

  • 基于端口的方式进行访问:(zabbix服务(apache:80) + web服务(nginx:80) --> 2个端口重复)

修改端口

[root@web_server01/etc/nginx/conf.d]# cat www.conf

server {

listen 8080;

server_name www.hbs.com;

location / {

root /usr/share/nginx/html/www;

index index.html;

}

}

[root@web_server01/etc/nginx/conf.d]#

[root@web_server01/etc/nginx/conf.d]# systemctl restart nginx

[root@web_server01/etc/nginx/conf.d]# netstat -lntup|grep 80

tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 38784/nginx: master

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 38784/nginx: master

[root@web_server01/etc/nginx/conf.d]#

  • 在这里插入图片描述
2.5.5 基于 用户访问 认证
  • nginx认证模块: ngx_http_auth_basic_module

  • 举例配置

location / {

auth_basic “closed site”; — 开启认证功能(欢迎信息)

auth_basic_user_file conf/htpasswd; — 加载用户密码文件,密码文件存放路径

}

密码文件存放路径,推荐相对路径

  • 具体详细配置过程

第一个历程: 编写虚拟主机配置文件

[root@web_server01/etc/nginx]# cat conf.d/www.conf

server {

listen 80;

server_name www.hbs.com;

location / {

  root   /usr/share/nginx/html/www;
  index  index.html;
  auth_basic   "欢迎来到王者荣耀!";
  auth_basic_user_file  passwd/passwd;        #passwd目录下的passwd密码文件

}

}

第二个历程: 创建密码文件(文件中密码信息必须是密文的)

创建 一个目录,存放密码文件

[root@web_server01/etc/nginx]# mkdir passwd

检查是否有htpasswd 密码工具,没有yum 安装httpd-tools

[root@web_server01/etc/nginx/passwd]# rpm -qf which htpasswd

httpd-tools-2.4.6-97.el7.centos.x86_64

[root@web_server01/etc/nginx/passwd]#

生成密码文件

[root@web_server01/etc/nginx/passwd]# htpasswd -bc passwd hbs 123456

Adding password for user hbs

[root@web_server01/etc/nginx/passwd]# cat passwd

hbs:$apr1 7 W a a m H G p 7WaamHGp 7WaamHGpENgUQ2yncebNZpFtGbRyX.

[root@web_server01/etc/nginx/passwd]#

查看生成的用户及密码

[root@web_server01/etc/nginx/passwd]# cat passwd

hbs:$apr1 7 W a a m H G p 7WaamHGp 7WaamHGpENgUQ2yncebNZpFtGbRyX.

[root@web_server01/etc/nginx/passwd]#

这样就可以直接测试,但是由于这样的密码文件具有较高的权限,不安全,所以涉及到修改密码文件,及文件属主。如果不修改文件权限,则不安全。

  • 测试

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 修改文件权限

[root@web_server01/etc/nginx/passwd]# chmod 600 ./passwd

  • 测试

  • 在这里插入图片描述

  • 报500问题原因

  • 在这里插入图片描述

  • 解决问题方法

[root@web_server01/etc/nginx/passwd]# chown nginx ./passwd

  • 测试

  • 在这里插入图片描述

2.5.6 利用nginx服务搭建网站文件共享服务器–index of
  • 文件共享

如何利用nginx服务搭建文件共享呢,比如像 阿里镜像网站那样,输入域名就可以看到很多目录,打开还可以 下载呢

  • 在这里插入图片描述

  • 操作步骤

第一个步: 编写配置文件(开启autoindex模块)

server {

listen 80;

server_name www.hbs.com;

location / {

  root   /usr/share/nginx/html/www;
  auth_basic   "欢迎来到王者荣耀!";
  auth_basic_user_file  passwd/passwd;
  autoindex on;                  # 开启autoindex 模块即可。

}

}

第二步:重启服务,如果有首页,将首页删除并制造测试数据

准备好的测试数据

[root@web_server01/usr/share/nginx/html/www]# ls

Centos Centos6.5 Centos6.9 Centos7.1 Centos7.2 hbs.txt index.html.backup

重启nginx 服务

[root@web_server01/usr/share/nginx/html/www]# systemctl restart nginx

此时测试,我们只有查看的权限,如果想下载,还学要修改mime.types文件。

mime.types媒体资源类型文件作用

文件中有的扩展名信息资源, 进行访问时会直接看到数据信息 txt

文件中没有的扩展名信息资源, 进行访问时会直接下载资源 php

  • 在这里插入图片描述

  • 赋予下载权限,修改mime.types 配置文件

修改 mime.types配置文件,搜索txt,将txt 改成php 就可以下载了。

  • 在这里插入图片描述

  • 测试

  • 在这里插入图片描述

2.5.7 nginx 解决首页乱码问题
  • 设置成utf-8

server {

listen 80;

server_name www.hbs.com;

location / {

root /usr/share/nginx/html/www;

auth_basic “欢迎来到王者荣耀!”;

auth_basic_user_file passwd/passwd;

charset utf-8;

}

}

location 添加 charset utf-8;

2.5.8 利用nginx服务搭配置文件别名功能
  • 配置别名

这里就是比如你的域名很长,你想配置短一点的域名例如:

www.hbs.com 你配一个 bs.com的别名

1.修改配置文件

server_name www.hbs.com bs.com

2.重启nginx 服务

[root@web_server01/etc/nginx]# systemctl restart nginx

3.修改hosts 文件

  • 在这里插入图片描述

  • 在这里插入图片描述

2.5.9 利用nginx状态模块功能对网站进行监控
  • 开启监控模块ngx_http_stub_status_module

location = /basic_status {

stub_status;

}

===========================

这里我在 conf.d 目录新建了一个关于状态的站点 status.conf

[root@web_server01/etc/nginx/conf.d]# cat status.conf

server {

listen 80;

server_name status.oldboy.com

stub_status;

}

平滑启动nginx

[root@web_server01/etc/nginx/conf.d]# systemctl reload nginx

添加hosts 域名

  • 访问测试

  • 在这里插入图片描述

监控获取参数说明

​ Active connections: 激活的连接数信息 4000用户 3500

​ accepts: 接收的连接数汇总(综合) TCP

​ handled: 处理的连接数汇总(综合) TCP

​ requests: 总计的请求数量 HTTP协议请求

​ Reading: nginx服务读取请求报文的数量 100人点餐

​ Writing: nginx服务响应报文信息数量 100人响应

​ Waiting: nginx队列机制,要处理(读取或者响应保存进行保存) 监控

2.5.10 nginx 日志功能配置及错误日志介绍
  • 访问日志/var/log/nginx/access.log ngx_http_log_module

  • 错误日志/var/log/nginx/error.log --- Core functionality

访问日志介绍

定义日志内容格式

log_format main '$remote_addr - r e m o t e u s e r [ remote_user [ remoteuser[time_local] “$request” ’

                 '$status $body_bytes_sent "$http_referer" '
                 '"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main; #调用日志格式

$remote_addr 显示用户访问源IP地址信息

$remote_user 显示认证的用户名信息

[$time_local] 显示访问网站时间

“$request” 请求报文的请求行信息

$status 用户访问网站状态码信息

$body_bytes_sent 显示响应的数据尺寸信息

$http_referer 记录调用网站资源的连接地址信息(防止用户盗链)

www.hbs.com—access.log—>blog.hbs.com到www.hbs.com的连接—>http_referer(链接)

$http_user_agent 记录用户使用什么客户端软件进行访问页面的 (谷歌 火狐 IE 安卓 iphone)

$http_x_forwarded_for 负载均衡

[root@web_server01/var/log/nginx]# tail -f /var/log/nginx/www_access.log

10.0.0.129 - - [02/Sep/2021:17:52:41 +0800] “GET / HTTP/1.1” 401 179 “-” “Mozilla/5.0 (Windows NT 6.1; rv:91.0) Gecko/20100101 Firefox/91.0” “-”

错误日志的配置及 错误级别

Syntax: error_log file [level]; 指定错误日志路径以及错误日志记录的级别

Default: error_log logs/error.log error;

Context: main, http, mail, stream, server, location

error_log /var/log/nginx/error.log warn;

错误级别:

debug :通知级别: 更加重要的信息进行通知说明

warn :警告级别: 可能出现了一些错误信息,但不影响服务运行

error :错误级别: 服务运行已经出现了错误,需要进行纠正 推荐选择

crit :严重级别: 必须进行修改调整

alert :严重警告级别: 即警告,而且必须进行错误修改

emerg :灾难级别: 服务已经不能正常运行 信息越少

级别越低,显示日志越少,级别越高显示日志越多。通常推荐 error 级别。

  • 不同的网站都配置自己的访问日志

server {

listen 80;

server_name www.hbs.com bs.com;

access_log /var/log/nginx/www_access.log main; #调用日志

location / {

root /usr/share/nginx/html/www;

auth_basic “欢迎来到王者荣耀!”;

auth_basic_user_file passwd/passwd;

autoindex on;

}

}

平滑重启

[root@web_server01/etc/nginx]# systemctl restart nginx

日志里会自动生成 www访问日志

[root@web_server01/var/log/nginx]# ls /var/log/nginx/www_access.log

/var/log/nginx/www_access.log

[root@web_server01/var/log/nginx]#

2.5.11 利用nginx实现页面跳转功能
  • 利用rewrite模块是跳转功能: http_rewrite_module

  • 语法

Syntax: rewrite regex replacement [flag]; rewite 匹配的正则信息 替换成什么信息

Default: —

Context: server, location, if

  • 举例配置(将hbs.com—>转换到blog.hbs.com)

rewrite blog.hbs.com/(.*) http://blog.hbs.com/$1 permanent; #重写规则配置

baidu.com / index.html 跳转方式

www.baidu.com/index.html

跳转方式:

永久跳转: permanent 301 会将跳转信息进项缓存

临时跳转: redirect 302 不会缓存跳转信息

编写步骤

出现无限跳转如何解决:

第一种方法: 利用不同server区块配置打破循环

server {

server_name hbs.com;

rewrite ^/(.*) http://blog.hbs.com/$1 permanent;

}

第二种方法: 利用if判断实现打破循环

if ( h o s t   ∗ " h b s . c o m host ~* "^hbs.com host "hbs.com") {

rewrite ^/(.*) http://blog.hbs.com/$1 permanent;

}

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 301 与302 的区别

  • 在这里插入图片描述

2.5.12 nginx 防盗链配置介绍
  • 什么是防盗链

防盗链的含义:网站内容部署自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容。 常常是一些名不见经传的小网站来盗取一些有实力的大网站的地址(比如一些音乐、图片、软件的下载地址)然后放置在自己的网站中,通过这种方法盗取大网站的空间和流量。

这样的话,我们会看到每天访问量很大,占用很多不必要的带宽,浪费资源,所以我们需要做一些限制。

防盗链其实就是采用服务器端编程,通过url过滤技术实现的防止盗链的软件。

  • 防盗链配置

Nginx server防盗链配置如下:

server {

listen 80;

server_name localhost www.hbs.com;

location / {

root /usr/share/nginx/html/www;

index index.html index.htm;

}

location ~* .(gif|jpg|png|swf|flv)$ {

valid_referers none blocked *.hbs.com;

root html;

if ($invalid_referer) {

return 403;

}

}

}

补充:

第一行:gif|jpg|png|swf|flv表示对gif、jpg、png、swf、flv后缀的文件实行防盗链

第二行:hbs.com 表示对hbs.com这个来路进行判断

if{}里面内容的意思是,如果来路不是指定来路就跳转到错误页面,当然直接返回403也是可以。

或者如下设置也可以:

location ~* .(gif|jpg|png|swf|flv)$

if ($host !=’*.hbs.com’) {

return 403;

}

2.5.13 部署搭建网站常见错误
  • 01.网站服务配置文件编写不正确

404 错误

解决方法一: 修改nginx配置文件—location

解决方法二: 在站点目录中创建相应目录或文件数据信息

403 错误

解决方法一: 不要禁止访问

解决方法二: 因为没有首页文件

  • 02.DNS信息配置不正确

  • 03. nginx配置文件修改一定要重启服务;

  • 04.做实验,要清除浏览器缓存

三、nginx 性能优化


3.1 Nginx 性能优化实战
  • 优化说明

随着访问量的不断增加,需要对Nginx和内核做相应的优化来满足高并发用户的访问,那下面在单台Nginx服务器来优化相关参数。通常从配置文件及内核做优化。

3.1.1 配置文件优化介绍
  • 配置文件优化

nginx进程数,建议按照cpu核数目来指定,一般为它的2倍。

worker_processes 8;

为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或者将一

个进程分配到多个cpu。

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000

00100000 01000000 10000000;

这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打

开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀

,所以最好与ulimit -n的值保持一致。

worker_rlimit_nofile 102400;

使用epoll的I/O模型。epoll是Linux内核为处理大批量文件描述符而作了改进的

poll,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用

率。

use epoll;

每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为

worker_connections 102400;

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

最后

小编的一位同事在校期间连续三年参加ACM-ICPC竞赛。从参赛开始,原计划每天刷一道算法题,实际上每天有时候不止一题,一年最终完成了 600+:

凭借三年刷题经验,他在校招中很快拿到了各大公司的offer。

入职前,他把他的刷题经验总结成1121页PDF书籍,作为礼物赠送给他的学弟学妹,希望同学们都能在最短时间内掌握校招常见的算法及解题思路。

整本书,我仔细看了一遍,作者非常细心地将常见核心算法题和汇总题拆分为4个章节。

而对于有时间的同学,作者还给出了他结合众多数据结构算法书籍,挑选出的一千多道题的解题思路和方法,以供有需要的同学慢慢研究。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

华为、OPPO等大厂,18年进入阿里一直到现在。**

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-jVap9AUi-1712790946437)]
[外链图片转存中…(img-eSgTW7G3-1712790946437)]
[外链图片转存中…(img-QuvQib7a-1712790946437)]
[外链图片转存中…(img-1vR1pDLh-1712790946438)]
[外链图片转存中…(img-6I25eoJo-1712790946438)]
[外链图片转存中…(img-EgdNOBee-1712790946438)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-PCs33eRe-1712790946439)]

最后

小编的一位同事在校期间连续三年参加ACM-ICPC竞赛。从参赛开始,原计划每天刷一道算法题,实际上每天有时候不止一题,一年最终完成了 600+:

凭借三年刷题经验,他在校招中很快拿到了各大公司的offer。

入职前,他把他的刷题经验总结成1121页PDF书籍,作为礼物赠送给他的学弟学妹,希望同学们都能在最短时间内掌握校招常见的算法及解题思路。

整本书,我仔细看了一遍,作者非常细心地将常见核心算法题和汇总题拆分为4个章节。

而对于有时间的同学,作者还给出了他结合众多数据结构算法书籍,挑选出的一千多道题的解题思路和方法,以供有需要的同学慢慢研究。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-EuQU3jra-1712790946439)]

  • 29
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值