Ngingx自学手册(二)常用配置虚拟主机,访问控制,认证和状态信息

本文涉及的产品
.cn 域名,1个 12个月
访问控制,不限时长
简介:

环境概况:

IP地址 服务器状态 简述
192.168.180.4 Nginx服务器
192.168.180.23
client
192.168.171.231 client


具体测试步骤如下:

(一)基于虚拟主机的配置。是通过不同的域名来区分提供的web服务器的主机,server_name指令主要用于配置基于域名的虚拟主机

    1,首先在192.168.180.23修改/etc/hosts文件

1
2
3
4
5
6
[root@localhost haproxy] # vim /etc/hosts
192.168.180.13  a.lqb.com
192.168.180.13  b.lqb.com
192.168.180.4   xn1.lqb.com
192.168.180.4   xn2.lqb.com
192.168.180.4   xn3.lqb.com

    2,修改nginx的配置文件。首先先把nginx.conf配置文件中的虚拟主机server段取出来,通过include导入进来。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
root@Monitor conf] # cat nginx.conf
worker_processes  1;
user appuser appuser;
error_log   /data/nginx/error .log;
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"' ;
    sendfile        on;
     access_log       /data/nginx/access .log;
     keepalive_timeout  65;
     gzip   on;
     server_tokens off;
    
     error_log   /data/nginx/error .log  debug;
     include server /server .conf   
  }

    3,接下来编辑配置虚拟主机段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
[root@Nginx conf] # cd ../html/
[root@Nginx html] # mkdir -pv xn{1,2,3}
mkdir : 已创建目录  "xn1"
mkdir : 已创建目录  "xn2"
mkdir : 已创建目录  "xn3"
[root@Nginx html] # echo "This is xn1" >> xn1/index.html
[root@Nginx html] # echo "This is xn2" >> xn2/index.html
[root@Nginx html] # echo "This is xn3" >> xn3/index.html
[root@Nginx html] # cat xn1/index.html 
This is xn1
[root@Monitor conf] # cat server/server.conf 
server {
          listen    80; 
          server_name  xn1.lqb.com; 
          location =/ { 
                  root  /html/xn1
                  index index.html; 
                   
            }
server {                                                                                    
          listen    80;                                                                             
          server_name  xn2.lqb.com;                                                                 
          location =/ {                                                                             
                  root  /html/xn2 ;                                                                   
                  index index.html;                                                                 
                    }                                                                                
            }
server {
          listen    80; 
          server_name  xn3.lqb.com; 
          location =/ { 
                  root  /html/xn2
                  index index.html; 
                   
           
            }         
[root@Monitor conf] # /usr/local/nginx/sbin/nginx -t
nginx: the configuration  file  /usr/local/nginx/conf/nginx .conf syntax is ok
nginx: configuration  file  /usr/local/nginx/conf/nginx .conf  test  is successful   
[root@Monitor conf] # /usr/local/nginx/sbin/nginx -s reload

   

  4,根据端口和域名的不同访问情况:

       a,端口和域名不能同时相同,如果相同的话会出现如下报错:“nginx: [warn] conflicting server name "xn1.lqb.com" on 0.0.0.0:80, ignored”,其实也是可以正常访问的,访问的结果是最上边的生效。

 server_name段的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
          listen    80;
          server_name  xn1.lqb.com;
          location / {
                  root  /html/xn1 ;
                  index index.html;
                    }
            }
server {
          listen    80;  
          server_name  xn1.lqb.com;
          location /  {
                  root  /html/xn2 ;
                  index index.html;
                    }
            }
1
2
3
4
[root@Monitor conf] # /usr/local/nginx/sbin/nginx -s reload
nginx: [warn] conflicting server name  "xn1.lqb.com"  on 0.0.0.0:80, ignored
[root@localhost ~] # curl xn1.lqb.com
Xn1 is this

        b,域名不同,但端口可以相同 .是正确的配置(基于域名的虚拟主机)

server_name段的配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
          listen    80;
          server_name  xn1.lqb.com;
          location / {
                  root  /html/xn1 ;
                  index index.html;
                    }
            }
server {
          listen    80;
          server_name  xn2.lqb.com;
          location /  {
                  root  /html/xn2 ;
                  index index.html;
                    }
            }

访问结果如下:

1
2
3
4
[root@localhost ~] # curl xn1.lqb.com
Xn1 is this
[root@localhost ~] # curl xn2.lqb.com
Xn2 is this

   c,域名相同,端口号不同,访问的路径也是不同的(基于端口号的虚拟主机)

server_name段的配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
          listen    80;
          server_name  xn1.lqb.com;
          location / {
                  root  /html/xn1 ;
                  index index.html;
                    }
            }
server {
          listen    8080;
          server_name  xn1.lqb.com;
          location /  {
                  root  /html/xn2 ;
                  index index.html;
                    }
            }

访问结果如下;

1
2
3
4
[root@localhost ~] # curl xn2.lqb.com
Xn1 is this
[root@localhost ~] # curl xn2.lqb.com:8080
Xn2 is this

   d,基于IP的端口访问。以在一块物理网卡上绑定多个lP地址。这样就能够在使用单一网卡的同一个服务器上运行多个基于IP的虚拟主机。设置IP别名也非常容易,只须配置系统上的网络接口,让它监听额外的lP地址。

1
2
3
4
5
6
7
[root@Monitor conf] # ip addr add 192.168.0.10/24 dev eth0
[root@Monitor conf] # ip addr add 192.168.0.20/24 dev eth0 
[root@Monitor conf] # ip add |grep eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
     inet 192.168.180.4 /24  brd 192.168.180.255 scope global eth0
     inet 192.168.0.10 /24  scope global eth0
     inet 192.168.0.20 /24  scope global secondary eth0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server {
          listen    192.168.0.10:8001;
          server_name  xn1.lqb.com;
          location / {
                  root  /html/xn1 ;
                  index index.html;
                    }
            }
server {
          listen    192.168.0.20:8080;
          server_name  xn2.lqb.com;
          location /  {
                  root  /html/xn2 ;
                  index index.html;
                    }
            }
server {
          listen    80;
          server_name  xn3.lqb.com;
          location / {
                  root  /html/xn3 ;
                  index index.html;
                    }

 测试,基于IP地址的访问需要重启nginx服务,重新加载时无法生效的

1
2
3
4
5
6
7
8
9
10
[root@Monitor ~] # netstat -lntp|grep nginx
tcp        0      0 192.168.0.10:8001           0.0.0.0:*                   LISTEN      2432 /nginx          
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      2432 /nginx          
tcp        0      0 192.168.0.20:8080           0.0.0.0:*                   LISTEN      2432 /nginx     
[root@Monitor ~] # curl 192.168.0.10:8001  
Xn1 is this
[root@Monitor ~] # curl 192.168.0.20:8080
Xn2 is this
[root@Monitor ~] # curl 192.168.180.4
Xn3 is this


 (二)IP访问控制。通过deny和allow设置访问控制,通过without-http_access_module模块来实现的

语法:

Syntax: allow address | CIDR | unix: | all;
Default:
Context: httpserverlocationlimit_except


Syntax: deny address | CIDR | unix: | all;
Default:
Context: httpserverlocationlimit_except


eg:配置信息如下:只允许192.168.180.23访问,其他的都禁止访问

1
2
3
4
5
6
7
8
9
10
server {
          listen    80;
          server_name  xn1.lqb.com;
          location / {
                  root  /html/xn1 ;
                  index index.html;
                  allow 192.168.180.23;
                  deny all;
                    }
            }

在180.4访问结果

1
2
3
4
5
6
7
8
[root@Monitor ~] # curl  xn1.lqb.com       
<html>
< head ><title>403 Forbidden< /title >< /head >
<body bgcolor= "white" >
<center><h1>403 Forbidden< /h1 >< /center >
<hr><center>nginx< /center >
< /body >
< /html >

在windows客户端访问如下:

wKioL1l-6QKx0ux4AABVcnDnzQE024.png

180.23访问如下

1
2
[root@localhost ~] # curl xn1.lqb.com
Xn1 is this

nginx日志如下:

1
2
3
192.168.181.231 - - [31 /Jul/2017 :16:25:40 +0800]  "GET / HTTP/1.1"  403 192  "-"  "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"
192.168.180.23 - - [31 /Jul/2017 :16:27:06 +0800]  "GET / HTTP/1.1"  200 12  "-"  "curl/7.29.0"
192.168.180.4 - - [31 /Jul/2017 :16:27:54 +0800]  "GET / HTTP/1.1"  403 162  "-"  "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.21 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2"


 只拒绝IP地址192.168.180.23访问,其他的都是可以访问的:

1
2
3
4
5
6
7
8
9
10
server {
          listen    80;
          server_name  xn1.lqb.com;
          location / {
                  root  /html/xn1 ;
                  index index.html;
                  deny 192.168.180.23;
                  allow  all;
                    }
            }

具体的nginx访问日志如下:

1
2
3
192.168.180.23 - - [31 /Jul/2017 :16:29:51 +0800]  "GET / HTTP/1.1"  403 162  "-"  "curl/7.29.0"
192.168.180.4 - - [31 /Jul/2017 :16:29:57 +0800]  "GET / HTTP/1.1"  200 12  "-"  "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.21 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2"
192.168.181.231 - - [31 /Jul/2017 :16:30:03 +0800]  "GET / HTTP/1.1"  200 12  "-"  "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"

备注:如果有很多IP地址需要拒绝,可以通过include deny.ip; 然后新建deny.ip文件,把所有的IP放到该文件里,就可以实现批量拒绝了


(三)nginx访问认证。让用户通过输入用户名和密码认证才可以访问web页面。

 1,通过htpasswd生成用户名及对应的密码数据库文件。

1
2
3
4
5
[root@Monitor conf] # htpasswd -bc /usr/local/nginx/conf/passwd yz 123456
Adding password  for  user yz
[root@Monitor conf] # more passwd 
yz:C9qDroTFbuldY
[root@Monitor conf] # chmod 400 passwd

 2,配置虚拟主机的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
server {
          listen    80;
          server_name  xn1.lqb.com;
          location / {
                  auth_basic  "please input you username and password" ;    ####虚拟主机的认证名称
                  auth_basic_user_file  /usr/local/nginx/conf/passwd ;       ###虚拟主机的认证文件
                  root  /html/xn1 ;
                  index index.html;
                  deny 192.168.180.23;
                  allow  all;
                    }
            }

 3,测试访问

wKioL1l-8Fji-zK8AAFg1oso88E602.png4,访问结果

wKioL1l-8HmjRkxqAABNqxrLJEg038.png


本文转自 lqbyz 51CTO博客,原文链接:http://blog.51cto.com/liqingbiao/1952421


相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
相关文章
|
2月前
|
网络虚拟化 数据安全/隐私保护 数据中心
对比了思科和华为网络设备的基本配置、接口配置、VLAN配置、路由配置、访问控制列表配置及其他重要命令
本文对比了思科和华为网络设备的基本配置、接口配置、VLAN配置、路由配置、访问控制列表配置及其他重要命令,帮助网络工程师更好地理解和使用这两个品牌的产品。通过详细对比,展示了两者的相似之处和差异,强调了持续学习的重要性。
63 2
|
3月前
|
网络协议 网络虚拟化 数据安全/隐私保护
访问控制列表(ACL)配置
访问控制列表(ACL)配置
访问控制列表(ACL)配置
|
3月前
|
安全 Java 数据安全/隐私保护
如何配置 Java 安全管理器来避免访问控制异常
配置Java安全管理器以防止访问控制异常,需在启动JVM时通过 `-Djava.security.manager` 参数启用,并设置安全策略文件,定义权限规则,限制代码执行操作,确保应用安全。
205 1
|
4月前
|
Apache 数据安全/隐私保护
HAProxy的高级配置选项-ACL篇之基于源地址访问控制案例
这篇文章介绍了HAProxy的ACL(访问控制列表)功能,特别是如何基于源地址进行访问控制的高级配置选项,并通过实战案例展示了如何配置ACL规则以允许或阻止特定IP地址或IP范围的访问。
64 7
HAProxy的高级配置选项-ACL篇之基于源地址访问控制案例
|
4月前
|
Apache 数据安全/隐私保护
HAProxy的高级配置选项-ACL篇之基于策略的访问控制
这篇文章介绍了HAProxy的高级配置选项,特别是如何使用ACL(访问控制列表)进行基于策略的访问控制,通过实战案例展示了如何配置HAProxy以允许或拒绝来自特定源地址的访问。
86 6
HAProxy的高级配置选项-ACL篇之基于策略的访问控制
ly~
|
4月前
|
消息中间件 搜索推荐 大数据
一般情况下在 RocketMQ 中添加 access key 的步骤: 一、确定配置文件位置 RocketMQ 的配置文件通常位于安装目录下的 conf 文件夹中。你需要找到 broker.conf 或相关的配置文件。 二、编辑配置文件 打开配置文件,查找与 ACL(访问控制列表)相关的配置部分。 在配置文件中添加以下内容:
大数据广泛应用于商业、金融、医疗和政府等多个领域。在商业上,它支持精准营销、客户细分及流失预测,并优化供应链管理;金融领域则利用大数据进行风险评估、市场预测及欺诈检测;医疗行业通过大数据预测疾病、提供个性化治疗;政府运用大数据进行城市规划和公共安全管理;工业领域则借助大数据进行设备维护、故障预测及质量控制。
ly~
212 2
|
4月前
|
NoSQL 关系型数据库 MySQL
HAProxy的高级配置选项-haproxy的四层负载及访问控制案例
这篇文章介绍了HAProxy的高级配置选项,特别是如何进行四层负载均衡和基于策略的访问控制。通过实战案例,展示了如何配置HAProxy以实现对特定IP地址的访问控制,以及如何通过四层负载均衡将流量分配到后端的MySQL和Redis服务。
223 6
|
5月前
|
安全 Nacos 数据库
【技术安全大揭秘】Nacos暴露公网后被非法访问?!6大安全加固秘籍,手把手教你如何保护数据库免遭恶意篡改,打造坚不可摧的微服务注册与配置中心!从限制公网访问到启用访问控制,全方位解析如何构建安全防护体系,让您从此告别数据安全风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其公网暴露可能引发数据库被非法访问甚至篡改的安全隐患。本文剖析此问题并提供解决方案,包括限制公网访问、启用HTTPS、加强数据库安全、配置访问控制及监控等,帮助开发者确保服务安全稳定运行。
463 0
|
5月前
|
应用服务中间件 nginx 数据安全/隐私保护
nginx配置源IP访问控制
nginx配置源IP访问控制
|
7月前
|
Java 数据安全/隐私保护
Java基础手册二(类和对象 对象创建和使用 面向对象封装性 构造方法与参数传递 this关键字 static关键字 继承 多态 方法覆盖 final关键字 访问控制权限修饰符)
Java基础手册二(类和对象 对象创建和使用 面向对象封装性 构造方法与参数传递 this关键字 static关键字 继承 多态 方法覆盖 final关键字 访问控制权限修饰符)
40 0

热门文章

最新文章