当前位置: 首页 > news >正文

Linux服务之nginx中http设置及虚拟主机搭建

目录

一.http相关概述

1.mime

2.server下的listen及root

2.1 listen

2.2 root

3.alias别名

4.location相关概述

  4.1 语法规则初步解释

5.access模块

6.验证模块

6.1 htpasswd 

7.自定义错误页面

8.虚拟主机搭建 (yum安装)


一.http相关概述

http 是一个大的语句块,包含若干个小的语句块(比如server语句块)。

http {
   expires   1d;
   include       mime.types; #导入支持的文件类型,是相对于/apps/nginx/conf的目录
   default_type application/octet-stream; #除mime.types中文件类型外,设置其它文件默认类型,访问其它类型时会提示下载不匹配的类型文件
#日志配置部分
    #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 logs/access.log main;
#自定义优化参数
   sendfile       on; 
    #tcp_nopush     on; #在开启了sendfile的情况下,合并请求后统一发送给客户端。
    #tcp_nodelay   off; #在开启了keepalived模式下的连接是否启用TCP_NODELAY选项,当为off时,延迟0.2s发送,默认On时,不延迟发送,立即发送用户响应报文。
    #keepalive_timeout 0;
   keepalive_timeout  65 65; #设置会话保持时间,第二个值为响应首部:keepAlived:timeout=65,可以和第一个值不同
    #gzip on; #开启文件压缩
   server {
       listen        80; #设置监听地址和端口
       server_name localhost   ; #设置server name,可以以空格隔开写多个并支持正则表达式,如:*.kgc.com www.kgc.* ~^www\d+\.kgc\.com$ default_server 

1.mime

此项为支持的 文件格式,如果不支持的格式 会自动帮你下载,如果支持 就会显示在网页上

范例:
text/plain   
text/html  
text/css 
image/jpeg   jpg jpeg
image/png 
video/mp4 
application/javascript
 

2.server下的listen及root

2.1 listen

语法结构:

listen address[:port] [default_server] [ssl] [http2 | quic] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

例子:

listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000 bind;

2.2 root

指定主页文件的位置

Syntax:    root path;
Default:    
root html;
Context:    http, server, location, 

root   指明根目录的位置   
location 根据 用户访问地址的不同, 指定访问的目录 

例子: 用户默认访问的主站点文件夹是 /data/nginx/html/pc/

server {
  listen 80;
  server_name localhost;
  root /data/nginx/html/pc/;
}

3.alias别名

例子:别名设置

server {
   listen 80;
   server_name www.kgc.com;
   location /nwes {     
        root /data/nginx/html/pc/;
        #相当于追加  将 文件夹news追加到/data/nginx/html/pc/news
        }
   location /study{
        alias /mnt/nginx/sports/;
        #相当于替换 你访问 study  就是访问/mnt/nginx/sports
        }
}

4.location相关概述

  4.1 语法规则初步解释

#语法规则:
location [ = | ~ | ~* | ^~ ] uri { ... }

=                  #用于标准url前,需要请求字串与uri精确匹配,大小敏感,如果匹配成功就停止向下匹配并立即处理请求
^~                #用于标准url前,表示包含正则表达式,并且匹配以指定的正则表达式开头,对URI的最左边部分做匹配检查,不区分字符大小写
~                  #用于标准url前,表示包含正则表达式,并且区分大小写
~*               #用于标准url前,表示包含正则表达式,并且不区分大写
不带符号              #匹配起始于此uri的所有的uri

#\                #用于标准url前,表示包含正则表达式并且转义字符。可以将 . * ?等转义为普通符号

#匹配优先级从高到低:
=, ^~, ~/~*, 不带符号


表格归纳

符号作用
=用于标准uri前,需要请求字串与uri精确匹配,大小敏感,如果匹配成功就停止向下匹配并立即处理请求
^~用于标准uri前,表示包含正则表达式,并且匹配以指定的正则表达式开头,对URI的最左边部分做匹配检查,不区分字符大小写
~用于标准uri前,表示包含正则表达式,并且区分大小写
~*用于标准uri前,表示包含正则表达式,并且不区分大写
不带符号匹配起始于此uri的所有的uri

例子:请解答以下题目选择匹配的 location

location ~ /Test1/$ {
  return 200 'A位置最前的正则表达式匹配';
  }
  location ~* /Test1/(\w+)$ {
  return 200 'B长正则表达式匹配';
  }
  location ^~ /Test1/ {
  return 200 'C 停止正则表达式匹配';
  }
  location /Test1/Test2 {
  return 200 'D 无符号最长的前缀匹配';
  }
  location /Test1 {
  return 200 'E 无符号短前缀匹配';
  }
  location = /Test1 {
  return 200 'F =精确匹配!';
  }

​/Test1
/Test1/
/Test1/Test2
/Test1/Test2/
/test1/Test2

详细解释

url   192.168.91.100/Test1
优先遍历 筛选出符合条件的前缀匹配
因为F精确匹配    E无符号短前缀匹配
由于优先级的关系所以
优先匹配F    F =精确匹配!

url  192.168.91.100/Test1/
优先遍历 筛选出符合条件的前缀匹配
C 停止正则表达式匹配  ^~    /Test1/
E 无符号短前缀匹配         /Test1
nginx  会优先遍历CE
CE 优先匹配  C 比 E长  所以选C
E 又会停止匹配正则的location 所以A B出局
优先匹配  C    停止正则表达式匹配

url  192.168.91.100/Test1/Test2
优先遍历 筛选出符合条件的前缀匹配
C 停止正则表达式匹配     ^~ /Test1/
D 无符号最长的前缀匹配   /Test1/Test2
E 无符号短前缀匹配      /Test1
此时 D  由于最长胜出  但是 由于没有 ^~  前缀 所以会继续按配置文件的顺序去找正则匹配
A ~     /Test1/$   已Test1 结尾显然不符合
B ~*   /Test1/(\w+)$  TEST1后面有1个以上  字母或数字或下划线或汉字   符合要求所以选择   B
优先匹配  B长正则表达式匹配


url  192.168.91.100/Test1/Test2/
优先遍历符合条件的前缀匹配
C 停止正则表达式匹配   ^~ /Test1
D 无符号最长的前缀匹配 /Test1/Test2
E 无符号短前缀匹配    /Test1
先记住 D 无符号最长的前缀匹配
然后去匹配正则
A ~     /Test1/$   已Test1 结尾显然不符合
B ~*   /Test1/(\w+)$  TEST1后面有1个以上字符  \w #匹配字母或数字或下划线或汉字  而/ 不在w中不符合要求

所以返回优先使用D    无符号最长的前缀匹配

url  192.168.91.100/test1/Test2
优先遍历符合条件的匹配
无前缀符号
直接去匹配正则
只有 B 不区分大小写的正则可以匹配
B ~*   /Test1/(\w+)$  TEST1后面有1个以上字符  \w #匹配字母或数字或下划线或汉字  而/ 不在w中不符合要求
优先匹配B 

5.access模块

格式:

Syntax: allow address | CIDR | unix: | all;
Default:    —
Context:    http, server, location, limit_except


Syntax: deny address | CIDR | unix: | all;
Default:    —
Context:    http, server, location, limit_except  (限制  用户的访问方式)

官方例子:

Example Configuration

location / {
    deny  192.168.1.1;
    allow 192.168.1.0/24;
    allow 10.1.1.0/16;
    allow 2001:0db8::/32;
    deny  all;
}

实际例子: 

配置文件修改
server {
   listen 80;
   server_name www.kgc.com;
   allow 192.168.91.0/24;
   deny 192.168.91.101;
   location / {
        root /data/nginx/html/pc;
 }

}

匹配了之后就不往下匹配了
所以范围小的往上

当访问 有问题时   默认站点 是按 文件的名字首字母开头排序

实际例子:禁止 用户访问    url  192.168.91.100/test

server{
   listen 192.168.91.100:80;
   server_name www.lucky.com;
   root /data/html;
   location /test {
   deny 192.168.91.101;
   }
}

6.验证模块

模块名称:ngx_http_auth_basic_module

语法:

Syntax: auth_basic string | off;
Default:   
auth_basic off;
Context:    http, server, location, limit_except


Syntax: auth_basic_user_file file;
Default:    —
Context:    http, server, location, limit_except

配置例子:

配置
server {
  listen 80;
  server_name www.kgc.com;
  location / {
       root /data/nginx/html/pc;
}
  location /admin{
       root /data/;
       auth_basic    "welcome";    #提示信息
       auth_basic_user_file /data/.httpuser;  #用户名密码文件,需要用htpasswd  命令生成
}
}

6.1 htpasswd 

要实现验证需要用户名和密码,htpasswd 命令可以建立 虚拟用户名和密码,此命令来自于 httpd-tools 包,如果没有安装 一下即可。

使用方法:

第一次生成文件
htpasswd -c  文件路径 姓名             交互式生成密码
htpasswd -bc 文件路径 姓名 密码         直接将密码跟在后面

-c  代表新建用户名和密码对应的文件
-b  将密码跟在用户名后

非第一次
htpasswd     文件路径 姓名             交互式生成密码
htpasswd -b  文件路径 姓名 密码         直接将密码跟在后面 

生成用户名密码案例:

第一次
[root@localhost conf.d]#htpasswd -bc /apps/nginx/conf.d/.httpuser kgc 123456
#没有  yum install  httpd-tools    -b  将名字密码跟在后面    -c  新建文件
Adding password for user kgc
[root@localhost conf.d]#cat /apps/nginx/conf.d/.httpuser
kgc:$apr1$RtjFE23R$lf2n.YpdssSf1EYJbIDqT0

非第一次
[root@localhost error]#htpasswd  /apps/nginx/conf.d/.httpuser xiaoming  
New password:
Re-type new password:
Adding password for user xiaoming

htpasswd -bc /data/.httpuser kgc 123456

7.自定义错误页面

格式:

Syntax: error_page code ... [=[response]] url;
Default:    —
Context:    http, server, location, if in location

error_page  404   /index.html

error_page    固定关键字
code          错误响应码(404 403 500  501  502 504等)
=             可以将响应码转换
response      code   状态  666
uri           访问连接

例子:自定义错误页面

www.pc.com/xxxxxxxx                   404
www.pc.com/40x.html
server {
  listen 80;
  server_name www.kgc.com;
  root /data/nginx/html/pc;
  error_page 404 /40x.html;
  #当出现404 错误  就去  root /data/nginx/html/pc/error/ 这个文件夹找40x.html  这个文件
  location = /40x.html {
       root /data/nginx/html/pc/error/;
   }
}

[root@localhost nginx]#mkdir /data/nginx/html/pc/error/
#建立目录
[root@localhost nginx]#cd  /data/nginx/html/pc/error/
#切换目录
[root@localhost nginx]#vim   40x.html
#新建页面,此处页面名字需要和 配置文件中的一致

例子:自定义错误代码

自定义 错误码
server {
  listen 80;
  server_name www.kgc.com;
  root /data/nginx/html/pc;
  error_page 404 =302 /40x.html;
  #把错误码 404 指定成302    注意此处的  40x.html 需要真实存在建立的页面必须一致
  location = /40x.html {
       root /data/nginx/html/pc/error/;
}
  location / {
       root /data/nginx/html/pc;
}
  location /admin{
       auth_basic    "admin site";
       auth_basic_user_file /apps/nginx/conf.d/.httpuser;
}
}

例子:错误了直接跳转到主页面

#出了错  直接跳转到显示主站点
server {
  listen 80;
  server_name www.kgc.com;
  root /data/nginx/html/pc/index.html;
  error_page 404 =302  /index.html;
  #把错误码 404 指定成302  并跳到主页面:/index.html
   error_page 404 = /index.html;
   #也可以不更改状态码直接跳转

8.虚拟主机搭建 (yum安装)

1.修改配置文件

[root@localhost ~]#vim /etc/nginx/nginx.conf
#修改配置文件 要放在  http 模块里
 include             /etc/nginx/mime.types;
 include             /apps/nginx/conf.d/*.conf;

2.建立子配置文件

[root@localhost ~]#mkdir -p /apps/nginx/conf.d/
#建立子配置文件

3.分别编写子配置文件

基于域名

[root@localhost conf.d]#vim pc.conf 
#分别编写配置文件
server {
   listen 80;
   server_name www.pc.com;
   root /data/nginx/html/pc/;
}

[root@localhost conf.d]#vim mobile.conf 
#分别编写配置文件
server {
   listen 80;
   server_name www.mobile.com;
   root /data/nginx/html/mobile/;
}

基于端口

[root@localhost conf.d]#vim pc.conf 
#分别编写配置文件
server {
   listen 192.168.91.100:80;
   server_name www.pc.com;
   root /data/nginx/html/pc/;
}
[root@localhost conf.d]#vim mobile.conf 
#分别编写配置文件
server {
   listen 192.168.91.100:8080;
   server_name www.mobile.com;
   root /data/nginx/html/mobile/;
}

4.构建数据文件夹和相应的数据文件

[root@localhost ~]#mkdir /data/nginx/html/pc -pv
[root@localhost ~]#mkdir /data/nginx/html/mobile -pv
#构建数据文件夹

[root@localhost ~]#echo pc > /data/nginx/html/pc/index.html
[root@localhost ~]#echo moblie > /data/nginx/html/mobile/index.html
#构建数据文件

5.去另一台机器修改/etc/hosts文件

[root@localhost ~]#vim /etc/hosts
192.168.91.100 www.pc.com
192.168.91.100 www.mobile.com

基于域名                        

[root@localhost ~]#curl www.mobile.com
moblie
[root@localhost ~]#curl www.pc.com
pc

基于端口

[root@localhost ~]#curl 192.168.91.100:8080
moblie
[root@localhost ~]#curl 192.168.91.100:80
pc

相关文章:

  • day 13 不平衡数据集的处理
  • ctfshow web入门 web52
  • 【coze】记忆体(变量、数据库、长期记忆、消息盒子)
  • B站视频下载到电脑的方法总结
  • 商业实战将归巢网内容构建为本地RAG模型的完整指南01-优雅草卓伊凡
  • 开发搭载OneNet平台的物联网数据收发APP的设计与实现
  • 【大模型面试】大模型(LLMs)高频面题全面整理(★2025年5月最新版★)
  • Python+Scrapy跨境电商爬虫实战:从亚马逊/沃尔玛数据采集到反爬攻克(附Pangolin API高效方案)
  • HarmonyOS开发:粒子动画使用详解
  • shell-流程控制-循环-函数
  • 新一代Python专业编译器Nuitka简介
  • 20. LangChain电商场景:构建智能客服与个性化推荐系统
  • MySQL 强制使用特定索引
  • Unity学习笔记二
  • (undone) xv6-labs-2020 补充 LAB lazy page allocation (Day11 xv6-2020 LAB5 懒分配)
  • py实现win自动化自动登陆qq
  • Android View#post()源码分析
  • tinyrenderer笔记(Shader)
  • C语言数组和函数的实践———扫雷游戏
  • APP自动化测试(一)
  • 中国证监会印发《推动公募基金高质量发展行动方案》
  • 哥伦比亚总统称将在访华期间签署“一带一路”倡议意向书,外交部回应
  • 同观·德国|默茨当总理后,能否带领德国在欧盟“说了算”?
  • 上海市委常委会扩大会议传达学习习近平总书记考察上海重要讲话和在部分省区市“十五五”时期经济社会发展座谈会上的重要讲话精神
  • 全红婵/陈芋汐夺得跳水世界杯总决赛女子双人10米台冠军
  • 上海与世界|黄菊与上海建设中国式全球城市