15158846557 在线咨询 在线咨询
15158846557 在线咨询
所在位置: 首页 > 营销资讯 > 网站运营 > 干货篇 | Nginx 我还真不信你学不会(中)

干货篇 | Nginx 我还真不信你学不会(中)

时间:2023-07-14 13:00:01 | 来源:网站运营

时间:2023-07-14 13:00:01 来源:网站运营

干货篇 | Nginx 我还真不信你学不会(中):在《干货篇 | Nginx 我还真不信你学不会(上)》中,我们大概对Nginx有一了一个大概印象:我们知道了Nginx是干什么用的、什么是反向代理和正向代理以及什么是负载均衡。

今天,我们来真正上手操作一下,俗话说“实践是检验真理的唯一标准”嘛,光听理论不上手操作,你永远也学不透。

关于Nginx的内容其实有很多,特别是模块部分的,如果我全部都列出来那5篇文章都写不完,所以我在这里给上Nginx官方文档链接,它里面有详细的教程。作为一名极客,我们要学会当遇到不懂的问题时去翻阅官网文档。

官方文档










下面我将今天要讲的内容做了一个思维导图:













Nginx初体验




首先先打开我们的机器,以下是我的机器的配置:

系统:CentOS 7.6

处理器:1个

内存:1G




我们使用yum安装方式来安装Nginx

yum install -y nginx


安装完毕之后启动Nginx

systemctl start nginx


设置成开机自启动

systemctl enable nginx


关闭我们的防火墙和SELinux,不然等下访问不了我们的Nginx网站

#关闭防火墙systemctl stop firewalld.service​#暂时关闭SELinuxsetenforce 0


我们还可以进入到SELinux配置文件里面,对其进行永久关闭

vim /etc/selinux/config











其实启动Nginx还有另一种命令,是nginx自带的,建议使用nginx自带命令

nginx


启动完毕后我们访问一下,因为配置文件里已经指明默认端口为80,网址后面不写端口号也行,它访问的就是默认页面。

访问本机地址:80











相关配置文件

下面我们来看看nginx的一些配置文件




nginx主配置文件

/etc/nginx/nginx.conf





这个配置文件是存放了一下nginx相关基础配置,例如:默认端口、日志格式、默认网站,worker进程的管理用户等等




配置目录

/etc/nginx/conf.d/这个是一个目录,里面通常是存放虚拟主机的一些配置,比如说我们要做一个博客网站和论坛网站,就可以分别定义这两个网站的配置文件,然后存放到这个目录下。就不用都把配置写进主配置文件里,显得更简洁美观











介绍完这两个,我们来看看主配置文件里面的具体内容

主配置文件里面其实还分为几个区域:main区域,event区域等




main区域:

主配置段,也就是全局配置段

cat /etc/nginx/nginx.conf=====================第一个部分,配置文件的主区域======================user nginx; # 定义worker进程的管理用户worker_processes auto; # 定义worker进程数,auto会自动调整为cpu核数worker_cpu_affinity auto [cpumask] #提高缓存命中率,将worker与cpu绑定 CPU MASK:00000001:第一个CPU 00000010:第二个CPU worker_cpu_affinity 0001 0010 0100 1000;worker_priority number#指定worker进程的nice值,设定worker进程优先级: [-20,20](最大为19)worker_rlimit_ nofile number #worker进程所能够打开的文件数量上限,如65535error_log /var/log/nginx/error.log; # 定义错误日志pid /run/nginx.pid; # 指定存储nginx主进程的PID文件路径include /usr/share/nginx/modules/*.conf; #指明包含进来的其他配置文件片段daemon on|off #是否以守护进程方式运行nginxmaster_ process on|off #是否以master/worker模型运行nginx,默认为on









事件区域

事件驱动相关的配置

因为nginx是基于事件驱动架构,而且使用异步网络IO模型

...events { worker_connections 1024; # 定义一个worker进程可以同时接受1024个请求 #总最大并发数: worker_processes * worker_ connections use method #指明并发连接请求的处理方法,默认为epoll use poll; accept_mutex on|off #处理新的连接请求的方法; on指由各个worker轮流处理新请求, Off指每个新请求的到达都会通知(唤醒)所有的worker进程,但只有一个进程可获得连接,造成 “惊群”,影响性能}









http区域

跟http协议有关的配置,里面还包括了server也就是虚拟主机的配置

...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; # 指定日志文件路径sendfile on; # 允许sendfile方式传输文件tcp_nopush on; # 在sendfile启动下,使用TCP_CORK套接字tcp_nodelay on; # 接连接保持活动状态keepalive_timeout 65; # 超时时间types_hash_max_size 2048;# 连接超时时间include /etc/nginx/mime.types; # 文件扩展名与文件类型映射表default_type application/octet-stream; # 默认文件类型,默认为text/plaininclude /etc/nginx/conf.d/*.conf; #虚拟主机目录server { listen 80 default_server; # 指定监听的端口 listen [::]:80 default_server; server_name _; # 指定网站主机名 root /usr/share/nginx/html; # 定义站点目录的位置 include /etc/nginx/default.d/*.conf; # 定义首页文件 location / {} error_page 404 /404.html; # 定义优雅显示页面信息 location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { }}


我们可以根据不同的需求来对配置文件进行修改,最好认真看一下上面的配置文件每个字段的具体意思,面试官有可能会问到哦




下面我们来讲讲nginx核心模块中的HTTP模块

模块介绍




在nginx的核心模块中,有这么一个模块,nginx的网站服务就是由它来具体实现的,它就是HTTP模块。

HTTP模块中又细分成好多个小的模块,分别实现不同的具体功能,比如说:重定向,访问控制,日志功能等

今天我们主要讲一下http模块中nginx_http_core_module模块




nginx_http_core_module

这个模块是用来配置虚拟主机的,下面是它的一个整体内容

server{ listen adress[:PORT]PORT; server_name SERVER_NAME; root /PATH/TO/DOCUMENT_ROOT;}


比如说我们的这个虚拟主机监听的是80端口、主机名字叫www.a.com、网页所在路径为/data/web1,我们可以这样配置

server{ listen 80; server_name www.a.com; root /data/web1; location / { }}


我们还可以设置默认监听端口,只需要在listen字段后面加上default_ server就行了,这样的话网址就是默认80端口

listen 80 default_ server;


我们还可以不同虚拟主机监听不同的端口

listen 80listen 8080listen 8888


还可以设置不同虚拟主机的ip地址

listen 192.168.1.1:80listen 192.168.1.2:80


配置完监听端口之后,我们来配置主机名称




比如说我们设置一个主机名为www.xxoo.com

server_name www.xxoo.com;


给它起两个名字也可以

server_name www.xxoo.com www.ooxx.com;


我们简单介绍一下名称匹配的优先级,等级是由高到低

(1) 首先是字符串精确匹配如: www.xxoo.com(2) 左侧*通配符如: *.xxoo.com(3) 右侧通配符如: www.xxoo.(4) 正则表达式如: ~^.*/.xxoo.com$(5) 默认主机 default_ server


我们接着讲一下跟路径相关的内容




比如说我们想用户输入www.xxoo.com 访问到的是我服务器的/www/html/目录

server{ server_name www.xxoo.com; root /www/html;}http://www.xxoo.com/index.html ----> /www/html/index.html


我们其实还可以配置多个location来实现多个uri到文件系统的路径映射,ngnix会根据用户请求的URI来检查定义的所有location ,并找出一个最佳匹配




比如说我想用户输入www.xxoo.com/1.html时访问到的是我服务器上/www/html 目录下的1.html文件

server{ server_name www.xxoo.com; root /www/html; location / { /www/html/; }}http://www.xxoo.com/1.html ----> /www/html/1.html


或者想让用户输入www.xxoo.com/images/1.jpg时访问到的是我服务器上 /data/images 目录下的1.jpg文件

server{ server_name www.xxoo.com; root /www/html; location /images{ /data/images }}http://www.xxoo.com/images ----> /data/images/1.jpg


除此之外,我们还可以使用路径别名

server{ listen 80; server_name www.salted.com; location /bbs/{ alias /web/forum/; } http: //www.salted.com/bbs/index.html ----> /web/forum/index.html


路径别名是文档映射的另一种机制,我们放在一起来对比一下

路径别名:server{ listen 80; server_name www.salted.com; location /bbs/{ alias /web/forum/; http://www.salted.com/bbs/index.html ----> /web/forum/index.html路径映射server{ listen 80; server_name www.salted.com; location /bbs/{ root /web/forum/; } http://www.salted.com/bbs/index.html ----> /web/forum/bbs/index.html


有时候访问网站出现错误时,一般的错误页面都不太友好。这时候我们可以定义错误页面。

server{ listen 80; server_name www.salted.com; error_page 404 /404.html; location /404.html { root /data/error/; }}这样我们访问后如果碰到404错误的话就会显示出我们指定的错误页面。




此外我们还可以指定响应状态码,比如说我们访问网站遇到404错误,但是我们不希望返回给用户的状态码是404,我们可以指定其他状态码。这样的话返回给用户的是其他状态码,但是页面还是404页面

server{ listen 80; server_name www.salted.com; error_page 404=200 /404.htmL; location /404.html { root /data/error/; }}


其实在nginx_http_core_module中还有很多其他的配置字段,这里就不多详细介绍了,感兴趣的可以去访问Nginx的官网查看官方文档。文章开头已经附上了。




下面我们将真正开始搭建我们的虚拟主机(网站)




Nginx实操

首先搭建一个虚拟主机,这次案例我用到的机器是如下配置:

CentOS7.6

CPU:1个

内存:1G

本机ip地址:192.168.244.128




还记得我们上文讲到的通常用来存放模块的那个/etc/nginx/con.d/目录吗,我们需要将虚拟主机(网站)的配置文件放进里面,nginx启动或重启时会扫描里面的配置文件。




首先编写我们的网站相关配置




这个虚拟主机监听的是8080端口,网站域名为www.salted.com,访问到的网络资源在服务器的路径为/usr/share/nginx/html目录下

vim /etc/nginx/conf.d/www.confserver { listen 8080; server_name www.xxoo.com; location / { root /usr/share/nginx/html; index my_index.html; }}


每次修改完配置文件记得让nginx重启一下,如下命令可以让nginx平滑重启

nginx -s reload


接下来我们要编写我们的html文件

vim /usr/share/nginx/html/my_index.html


接下来我们编写hosts文件,实现域名解析。这样直接访问域名就能访问到网站了。

vim /etc/hosts192.168.244.128 www.xxoo.com如果想要在Windows上通过访问域名就能访问到网站的话,我们要在Windows上设置域名解析

Windows的hosts文件地址为:C:/Windows/System32/drivers/etc

接下来我们来验证一下

在linux系统上使用如下命令: 记得写上8080端口,不然访问的是默认页面 curl www.xxoo.com:8080










在Windows上直接输入ip地址或者域名







这样我们的第一个虚拟主机就配置完成了!




如果说我们想要访问多个资源的话,我们就要配置多个文件路径

server{ listen 8080 ; server_name www.xxoo.com; root /usr/share/nginx/html; location / { index my_index.html; } location /data { root /web/; } location /web/images { root /web/; }}


别忘了每次更新完配置文件都要重启一下

nginx -s reload


接下来创建我们存放文件的相关目录并分别写入内容

mkdir -pv /web/{data,images}echo "this is /web/data" > /web/data/index.htmlecho "this is /web/images" > /web/images/index.html```








我们访问来验证一下:










比如说我们访问一个不存在的网页,

像www.xxoo.com:8080/xxoo/index.html

就会显示如下错误页面










这个页面其实不太友好,我们可以自定义一个错误页面

server{ listen 8080 ; server_name www.xxoo.com; root /usr/share/nginx/html; error_page 404 /404.html; location / { index my_index.html; } location /data { root /web/; } location /images { root /web/; } location /404.html { root /web/pages/; }}```创建存放错误页面的目录

mkdir /web/pages


创建错误页面

vim /web/pages/404.html<h1>this is 404 error!</h1>```验证如下










最后,我们再来讲下如何配置多个虚拟主机

首先在/etc/nginx/con.d/目录下创建我们的各个虚拟主机配置文件并配置好

touch /etc/nginx/conf.d/{bbs,blog,www}.conf


#第一个虚拟主机vim /etc/nginx/conf.d/bbs.confserver { listen 8080; server_name bbs.com; location / { root /html/bbs; index index.html; }}#第二个虚拟主机vim /etc/nginx/conf.d/blog.confserver { listen 8080; server_name blog.com; location / { root /html/blog; index index.html; }}#第三个虚拟主机vim /etc/nginx/conf.d/www.confserver { listen 8080; server_name www.com; location / { root /html/www; index index.html; }}


准备存放网络资源的目录

mkdir -p /html/{www,bbs,blog}for name in {www,bbs,blog};do echo "<h1> $name </h1>" >/html/$name/index.html;done;;


添加域名解析

vim /etc/hosts192.168.33.133 www.eagle.com bbs.eagle.com blog.eagle.com


更新配置文件后平滑重启

nginx -s reload


最后验证

curl www.com:8080<h1> www </h1>curl bbs.com:8080<h1> bbs </h1>curl blog.com:8080<h1> blog </h1>

关键词:干货

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭