首页 > 其他分享 >1125笔记

1125笔记

时间:2023-11-29 21:25:57浏览次数:48  
标签:http 1125 笔记 server nginx location allow root

1、状态监控

# 创建虚拟主机文件,查看status功能

[root@web-8 /etc/nginx/conf.d]#cat status.conf
# 作用就是让你访问 ip:9999可以精确定位到这个虚拟主机
server{
  listen 9999;
  server_name _;
stub_status on;
access_log off; # 因为它不是一个基于http请求响应的网站,仅仅是展示连接的信息,都不需要写location。
}


主配置文件include

vim /etc/nginx/nginx.conf 

....
  include /etc/nginx/conf.d/status.conf;
}

重新加载 nginx -t nginx -s reload

 

浏览器测试访问

http://192.168.1.62:9999/

 

可以用ab命令多发一些请求测试

[root@c1 conf.d]# ab -c 100 -n 10000 http://192.168.1.62/

2、基于ip地址的访问限制

2.1 限制10网段请允许访问

先建一个虚拟网卡

ifconfig ens33:1 10.0.0.1 netmask 255.255.255.0

创建配置文件

cd /etc/nginx/conf.d/
vim deny-allow.conf
server {
listen 2233;
server_name _;
location / {
  allow 10.0.0.0/24;
  deny all;
      root /www/deny-allow;
      index index.html;
}
}

主配置文件include

/etc/nginx/nginx.conf

    include /etc/nginx/conf.d/deny-allow.conf;
}

创建网页目录,和网页文件

mkdir -p /www/deny-allow
cat > /www/deny-allow/index.html << EOF
<!DOCTYPE html>
<html>
<head>
<title>deny-allow</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to deny all.............allow 10</h1>
</body>
</html>
EOF

重新加载nginx

nginx -t

nginx -s reload

测试访问

通过win的浏览器访问,能打开吗,打不开。。因为网段是172

通过命令行访问

curl 172.16.5.51:2233 # 打不开,从172网卡出去的

curl 10.0.0.1:2233 #可以,因为是从10网卡出去的

2.2 允许172,拒绝所有

就把上边的配置稍微改一下

server {

listen 2233;
server_name _;

location / {
  #allow 10.0.0.0/24;
  allow 172.16.5.0/24;
  deny all;
      root /www/deny-allow;
      index index.html;
}

}

2.3 允许具体IP访问,拒绝其他所有

server {

listen 2233;
server_name _;

location / {
  #allow 10.0.0.0/24;
  allow 172.16.5.1;
  deny all;
      root /www/deny-allow;
      index index.html;
}

}

 

2.4 拒绝10.0.0.0/24网段

server {
listen 2233;
server_name _;
location / {
  #allow 10.0.0.0/24;
  #allow 172.16.5.51;
  deny 10.0.0.0/24;
      root /www/deny-allow;
      index index.html;
}
}

2.5 拒绝具体一个IP

server {
listen 2233;
server_name _;
location / {
  #allow 10.0.0.0/24;
  #allow 172.16.5.51;
  deny 172.16.5.1;
      root /www/deny-allow;
      index index.html;
}
}

3、基于用户名密码的验证

安装密码工具,和创建用户名密码

1. 创建密码,密码不是一个简单的纯文本文件,得基于密码数据库的存储
有工具帮你完成htpasswd这个工具去创建密码文件
yum -y install httpd-tools

创建密码文件
# -b 免交互,输入账号密码即可
# -c 设置密码写入到什么文件
只有第一个用户用-c,之后不需要了。
htpasswd -b -c /etc/nginx/auth_passwd hk 123456
htpasswd -b /etc/nginx/auth_passwd hk1 123456
htpasswd -b /etc/nginx/auth_passwd hk2 123456

创建虚拟主机配置文件

vim auth_basic.conf 

server {
      listen 172.16.5.51:3344;
      charset utf-8;
      server_name _;
      location / {
          auth_basic "please input your account password";
      auth_basic_user_file /etc/nginx/auth_passwd;
              root /www/auth-html;
              index index.html;
      }
}

mkdir /www/auth-html

vim /www/auth-html/index.html

<h1>这是密码验证。。。。</h1>

nginx主文件include

    include /etc/nginx/conf.d/auth_basic.conf;

nginx -t

nginx -s reload

 

4.nginx开启echo

清理服务器,卸载原yum安装的nginx

yum remove nginx -y

安装之前,准备好编译环境。

yum install pcre pcre-devel openssl openssl-devel  zlib zlib-devel gzip  gcc gcc-c++ make wget httpd-tools vim -y

 

# 下载echo模块的源代码
# 通过个git命令,去下载github代码仓库中的源码目录

yum install git -y #

cd /opt/
# 由于某些不可描述的因素,代码可能下载不了。。
# 去windows中下好了,发给linux

git clone https://github.com/openresty/echo-nginx-module.git
我的下载地址
https://codeload.github.com/openresty/echo-nginx-module/zip/refs/heads/master

 

mv echo-nginx-module-master /opt/

 

下载安装nginx

http://nginx.org/download/

cd /data/install/
wget http://nginx.org/download/nginx-1.20.2.tar.gz

 

创建www用户

useradd www

cd /data/install/
tar zxvf nginx-1.20.2.tar.gz
./configure --user=www --group=www --prefix=/data/server/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre --add-module=/opt/echo-nginx-module-master
make && make install

验证,并加入环境变量

vim /etc/profile

export NGINX_HOME=/data/server/nginx
export MYSQL_HOME=/data/server/mysql-57
export SCRIPT_HOME=/data/script
export NODE_HOME=/data/server/node-v16.17.0-linux-x64
export PATH=$NODE_HOME/bin:$MYSQL_HOME/bin:$NODE_HOME/bin:$SCRIPT_HOME:$JAVA_HOME/bin:$PATH
#export JAVA_HOME=/usr/local/jdk-11.0.17
export JAVA_HOME=/usr/local/jdk1.7.0_80
export PATH=$NGINX_HOME/sbin:$SCRIPT_HOME:$NGINX_HOME/sbin:$JAVA_HOME/bin:$MYSQL_HOME/bin:$PATH

 

source /etc/profile
[root@c1 ~]# nginx -v
nginx version: nginx/1.20.2
[root@c1 ~]# nginx -V
nginx version: nginx/1.20.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/data/server/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre --add-module=/opt/echo-nginx-module-master

 

 

#### by 2023-11-25
user www;
worker_processes auto;
#worker_processes 2;
#worker_cpu_affinity 01 10;

error_log logs/error.log notice;
pid       logs/nginx.pid;


events {
  worker_connections 1024;
}


http {
  include       mime.types;
  default_type application/octet-stream;

  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;
  #access_log off;
  sendfile       on;
  #tcp_nopush     on;

  keepalive_timeout 65;

  #gzip on;

  include vhost/*.conf;
}

cd /data/server/nginx/conf

mkdir vhost

#############
server {
  listen       11444;
  server_name localhost;
  charset utf-8;
  location / {
      echo "hello 80 welcome you!";
      echo $uri;
      echo $document_uri;
      echo $remote_addr;
      echo $remote_port;
      echo $http_user_agent;
  }
}

 

测试

[root@template ~]# curl 172.16.5.51:11444/haha
hello 80 welcome you!
/haha
/haha
172.16.5.50
34148
curl/7.29.0

5、location

优先级
匹配符匹配规则优先级
= 定义 URI 和位置的精确匹配。 1
^~ 以某个字符串开头,不检查正则(,区分大小写) 2
~ 区分大小写的正则匹配 (认识正则,区分url大小写) 3
~* 不区分大小写的正则匹配(认识正则,不区分url大小写) 4

 

 

 
     

验证优先级

vim location-1.conf 
# 配置文件如下
server {
  listen 22333;
  server_name _;

  # 最低级匹配,不符合其他locaiton就来这
  # 属于通用url规则
  location / {
      return 200 "location / \n";
  }


  # 优先级最高,等于号后面可以指定url
  location = / {
      return 200 "location = / \n";
  }


  #以/documents/开头的url,来这里,如符合其他locaiton,则以其他优先
  location /documents/ {
      return 200 "location /documents/ \n";
  }
  #匹配任何以.gif结尾的请求,支持正则
  location ~* \.(gif|jpg|jpeg)$ {
      return 200 "location ~* \.(gif|jpg|jpeg) \n";
  }

  #匹配任何以/images/开头的请求,不匹配正则
  location ^~ /images/ {
      return 200 "location ^~ /images/ \n";
  }


  access_log off;

}

 

验证

[root@c1 vhost]# curl 172.16.5.51:22333/fdsfdsfds
location /  
[root@c1 vhost]# curl 172.16.5.51:22333/images
location /  
[root@c1 vhost]# curl 172.16.5.51:22333/images/
location ^~ /images/  
[root@c1 vhost]# curl 172.16.5.51:22333/images
location /  
[root@c1 vhost]# curl 172.16.5.51:22333/images/fdsfdsfds
location ^~ /images/  
[root@c1 vhost]# curl 172.16.5.51:22333/images/ha.jpg
location ^~ /images/  
[root@c1 vhost]# curl 172.16.5.51:22333/imagesdfds/ha.jpg
location ~* \.(gif|jpg|jpeg)

 

root和alias

server {


listen 33555;
server_name _;

# 你现在需要设置
# 需要访问 172.16.5.51:33555/static/xx.jpg
# 你有什么写法,可以返回这个数据,给用户看到呢?
# 当前有一个代码目录,叫做 /huya/ 要求静态数据放在这个目录下
# 已知有一个静态图片,放在如下的目录中 /huya/static/caixukun.jpg
# 要求,要进行静态请求匹配,匹配/static/ url开头
# 到这还看懂扣1 不懂 3
# 等于匹配用户访问的url形式是 10.0.0.8:33555/static/xx.jpg
location ^~ /static/ {
# 两种写法第一个,写root,root特点是会将该url(/static)填充到网页根目录下,认为它也是一个目录
# 测一测是否能让你访问到 xx.jpg

# root /huya/static/; # 错误写法
root /huya/;

# 第二种写法,alias别名用法
# alias /huya/static/;

}

}

 

 

 

6、rewrite

7 、return

 

cat return.conf 
server {

  listen 22666;
  server_name _;
  root html;

  # 精确匹配,客户端只访问了网页根目录
  location = / {
      echo "welcome to haha linux course.";
  }

  location /test-return {

          # 客户端完全匹配
          if ($http_user_agent = huawei){
            return 200 "agent is $http_user_agent \n";
          }

          # 限制必须是GET方法
          if ($request_method != GET){

            return 405 "必须是GET方法!其他方法不允许\n";
          }

          # 如果是IE浏览器,就重定向
          if ($http_user_agent ~* IE){
            return 301 http://hello.com/xx.jpeg;
          }

                      # 没有if条件匹配到
          return 404 "sorry, nothing ....\n";
    }

      # 默认匹配,如果没有匹配到任意内容,跳转到首页 jd.com就是这个做法
      location / {
    return 301 http://hello.com/xx.jpeg;
      }

      location /ji {
          return 500 "鸡你太美\n";
      }

}

8、set

server {

  listen 22777;
  server_name _;
  root html;
   
  set $my_url http://hello.com/xx.jpeg;

  location /test-set {
      return 301 $my_url;
  }

}

 

9、break

server {

      listen 22888;
      server_name _;
      root html;

      location / {

              set $my_website http://hello.com/xx.jpeg;
              echo "welcome to my website:" $my_website;
              break;

              set $my_name yuchao;
              echo "my name is" $my_name;

      }

}

标签:http,1125,笔记,server,nginx,location,allow,root
From: https://www.cnblogs.com/yuyongqi/p/17865825.html

相关文章

  • 23.11.29(代码大全2读书笔记)
    *第一部分打好基础 第一章欢迎进入软件构建的世界 >软件构建的定义:包括编码与调试、单元测试、规划构建、集成等,没有给出一个明确的定义。>软件构建的重要性:软件构建是编写大型项目最重要的、不可或缺的部分。 第二章用隐喻来更充分地理解软件开发 > 对软件开......
  • [Vue] vue学习笔记(3): 绑定样式
    动态绑定样式vue允许动态设置class的值,通过利用v-bind指令......
  • 信息安全数学基础复习笔记
    1.整除、欧几里得除法的的定义好像别的没啥好说的,就挑点自己记不太清的写上来.1.1Eratosthenes(厄拉托塞斯)筛法该方法用于快速获得小于整数N的素数集合,工作原理如下:对寻找小于整数N的素数,先求\(\sqrt{N}\)(没法取整就写成\(\sqrt{N}<[\sqrt{N}]+1\)的形式),获取小于\(\sqrt{N}......
  • 学习笔记
    文件类型在Linux中,文件有如下几种类型:d:文件夹-:普通文件l:软链接(类似Windows的快捷方式)b:块设备文件(例如硬盘、光驱等)p:管道文件c:字符设备文件(例如屏幕等串口设备)s:套接口文件访问权限用户对一个文件的权限有三种:可读、可写、可执行:可读用r表示(read):有了可读权限,就可以读取文件的内容......
  • 学习笔记1
    Linux文件的打包与压缩基本概念        打包是指将多个文件或目录打包成一个文件,压缩是指将一个大的文件通过算法压缩成一个小的文件。由于linux中的很多压缩程序只能对一个文件进行,所以通常要先将全部文件打包成一个文件,然后再对那一个打包文件进行压缩。tar命令介绍......
  • 学习笔记1 :Java基础
    1、JVM(1)Java虚拟机:是运行所有Java程序的抽象计算机,是Java语言的运行环境。(2)JVM包括:一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域(3)跨平台:JVM在执行字节码时,把字节码解释成具体平台上的机器指令执行。一套代码,一次编译,多平台运行。但是,不同平台需要不......
  • 秦疆的Java课程笔记:46 方法 方法的定义和调用
    Java方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法:修饰符返回值类型方法名(参数类型参数名){//这一串就是方法头 …… 方法体 …… return返回值;}方法包含一个方法头和方法体。下面是一个方法的所有部分:......
  • 秦疆的Java课程笔记:47 方法 方法的重载
    重载就是在一个类中,有相同的函数名称,但是形参不同的函数。(这里的“函数”,应该就是“方法”的意思,但是老师的PPT上就是这么写的。)方法的重载规则:方法名称必须相同参数列表必须不同(个数不同,类型不同,排列顺序不同)方法的返回值类型可以相同也可以不同仅仅返回类型不同不足以成......
  • 《Effective Java》阅读笔记-第四章
    EffectiveJava阅读笔记第四章类和接口第15条使类和成员的可访问性最小化软件设计的基本原则之一:封装第16条使用Getter/Setter代替public字段这书的翻译可真垃圾第17条使可变性最小化标准库中有许多不可变类:String、基础类型的封装类、BigInteger、BigDecim......
  • 配置树莓派系统(64位)_无网线_无外显_笔记本远程连接
    硬件:一个树莓派4B、一台笔记本电脑(以win10系统为例,做树莓派显示屏)1下载工具软件1.1下载树莓派镜像烧录器RaspberryPiImager。该软件是把RaspberryPiOS安装(烧录)到TD卡上的工具。树莓派官网链接。根据下载RaspberryPiImager的提示,点击DownloadforWindows。下......