Linux-07-nginx基础知识、基础模块之目录索引auto_index、访问限制

一、nginx基础知识

1.什么是Nginx
nginx 是一个 web服务器 ( 静态资源 )  代理服务器...
2.Nginx应用场景
(1)web服务器
(2)反向代理
		2.1) 负载均衡
		2.2) 缓存
(3)安全服务https
3.Nginx组成结构
二进制文件:			汽车的基本框架,提供驾驶功能
nginx配置文件:		控制汽车前往的目的地
access_log日志:		GPS记录行动轨迹
error_log日志:		黑匣子,分析故障,和定位故障
4.Nginx安装部署
(1)配置官方yum源    (  epel源获取,使用过程中就会出现权限不足的问题  )
			
(2)在执行命令安装
		[root@oldboy-pythonedu ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
		[root@oldboy-pythonedu ~]# yum install nginx -y
		[root@oldboy-pythonedu ~]# rpm -q nginx
		nginx-1.16.1-1.el7.x86_64
5.Nginx目录结构
[root@oldboy-pythonedu ~]# rpm -ql nginx
/etc/logrotate.d/nginx			# 日志轮转 ( 日志切割 )
/etc/nginx/						# nginx配置文件目录
/etc/nginx/nginx.conf			# nginx主配置文件
/var/log/nginx					# 日志目录 
6.Nginx配置文件
[root@oldboy-pythonedu ~]# systemctl stop httpd
[root@oldboy-pythonedu ~]# systemctl disable httpd
[root@oldboy-pythonedu ~]# systemctl start nginx
[root@oldboy-pythonedu ~]# netstat -lntp | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      26551/nginx: master 

  vim
[root@oldboy-pythonedu ~]# cat /etc/nginx/nginx.conf
user nginx;											# 运行nginx的用户身份
worker_processes auto;								# worker进程运行多少个, auto自动与cpu核心保持一致
error_log /var/log/nginx/error.log;					# 错误日志
pid /run/nginx.pid;									# 进程运行后,在该目录下存放一个pid文件,文件中记录的是该进程的ID编号

include /usr/share/nginx/modules/*.conf;			# 包含所有的模块配置文件

events {
    worker_connections 1024;						# worker的最大连接数   [  worker_connections *  worker_processes ]
}

	
http {			# 负责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;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;			# 存放的都是nginx能支持的文件类型
    default_type        application/octet-stream;		# 当 nginx 不支持该类型时,默认以下载的方式回传给用户

    include /etc/nginx/conf.d/*.conf;					# 包含conf.d/*.conf结尾的文件    [ 定义的一个又一个的网站 ]
}

第一步: 关闭防火墙

firewalld
	systemctl stop firewalld
	systemctl disable firewalld
	
selinux
	setenforce 0
	sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

第二步: 清除nginx.conf中所有的注释,以及server整个段的内容

nginx.conf 主要配置文件 ( 一般不动 )

[root@oldboy-pythonedu ~]# cat /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

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;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

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

第三步: 新建一个站点

[root@oldboy-pythonedu ~]# cat /etc/nginx/conf.d/test.oldboyedu.com.conf
server {
	listen 80;
	server_name test.oldboyedu.com;

	location / {
		root /code/html;
		index index.html;
	}
}

	# 根据配置文件定义的路径,创建该路径,并放入代码
[root@oldboy-pythonedu ~]# mkdir /code/html -p 
[root@oldboy-pythonedu ~]# echo "test-oldboyedu.com....." > /code/html/index.html

	# 检查配置文件是否有错误的地方
[root@oldboy-pythonedu ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful


	# 重载服务,并生效
[root@oldboy-pythonedu ~]# systemctl restart nginx	

	# 配置Hosts解析  ( 假的域名  )
		Windows:  C:\Windows\System32\drivers\etc
					10.0.0.200 test.oldboyedu.com
	
		MacOS:    /etc/hosts
					10.0.0.200 test.oldboyedu.com
7.Nginx运行小游戏

在服务器再新增一个游戏的站点:

第一步: 编辑 nginx 配置文件

[root@oldboy-pythonedu ~]# cat /etc/nginx/conf.d/game.oldboyedu.com.conf
server {
	listen 80;
	server_name game.oldboyedu.com;

	location / {
		root /code/game;
		index index.html;
	}
}

第二步: 根据配置,创建目录,上传代码

[root@oldboy-pythonedu ~]# mkdir /code/game -p
[root@oldboy-pythonedu ~]# cd /code/game/
[root@oldboy-pythonedu game]# rz
[root@oldboy-pythonedu game]# unzip html5_\(1\).zip 

第三步: 检查nginx配置文件语法, 然后重载服务

[root@oldboy-pythonedu game]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@oldboy-pythonedu game]# systemctl restart nginx

第四步: 配置Hosts解析 ( 假的 )

Windows电脑没有Hosts文件,  新建出来.

	Windows:  C:\Windows\System32\drivers\etc
				10.0.0.200 test.oldboyedu.com
				10.0.0.200 game.oldboyedu.com

# vim /etc/nginx/conf.d/game.oldboyedu.com.conf			# 定义的第一个网站
server {
	listen 80;							# 监听的端口
	server_name game.oldboyedu.com;		# 申明域名
	
	location / {						# 匹配用户请求的uri路径
		root /code/html;				# 告诉 nginx 站点的代码在哪里目录下
		index index.html index.htm;		# 定义 默认返回的主页面
	}
}
8.Nginx整个请求流程
            url路径:  		http://game.oldboyedu.com  /game/zuqiu/index.html
			真实服务器地址:	/code/game/game/zuqiu/index.html
		
		1.用户通过浏览器请求game.oldboyedu.com   
		2.浏览器会添加一些协议头信息,携带上默认的请求uri,  http://game.oldboyedu.com/
		3.浏览器会发起DNS解析,解析game.oldboyedu.com  对应的真实IP地址   
		4.浏览器获取到真实的IP地址后,  通过  IP+Prot的方式请求应用程序Nginx
		5.Nginx接受到请求后,会进行事件的处理, 将用户请求的 Request 信息中 包含的 Host 字段, 与 Server_name 字段进行匹配
			5.1) 如果匹配不成功,则会随机返回一个站点的页面给用户.
			5.2) 可以通过 在 listen 80 default_server; 方式来定义具体默认返回哪个站点给用户.
			5.3) 如果碰到非法的域名,可以拒绝,也可以做跳转.
					拒绝:
						return 500;
					跳转:
						return 302 https://www.jd.com;
		6.如果匹配成功, 接下来进行location uri地址匹配, 获取要返回的文件所在的路径 + 默认返回的页面 
		7.Nginx获取磁盘上的文件, 然后构建响应报文,回传给浏览器,浏览器加载并且渲染最终的结果呈现给用户.
		
		
		虚拟主机:  在一台服务器上,运行多套站点.

二、nginx基础模块

1.目录索引 auto_index

能实现和阿里云mirrors.aliyun.com 一样的效果.

[root@oldboy-pythonedu ~]# cat /etc/nginx/conf.d/mirror.oldboyedu.com.conf
server {
	listen 80;
	server_name mirror.oldboyedu.com;
	charset utf8;

	location / {
		root /code/mirror;
		autoindex on;					# 开启目录索引功能
		autoindex_exact_size off;		# 显示文件具体大小
		autoindex_localtime on;			# 显示本地服务器时间 
	}
}

[root@oldboy-pythonedu ~]# nginx -t
[root@oldboy-pythonedu ~]# systemctl restart nginx

[root@oldboy-pythonedu ~]# mkdir -p /code/mirror
[root@oldboy-pythonedu ~]# cd /code/mirror 
[root@oldboy-pythonedu ~]# rz
2.访问限制
基于来源IP限制	
	1) 仅允许 10.0.0.1 访问,其他访问全部拒绝
	
	server {
		...
		allow 10.0.0.1/32;
		deny all;
		...
	}
	
	2) 拒绝10.0.0.1 访问, 其他全部允许
	
	server {
		...
		deny 10.0.0.1/32;
		allow all;
		...
	}
	

	测试的curl命令:
		[root@oldboy-pythonedu mirror]# curl -HHost:mirror.oldboyedu.com http://10.0.0.200/

基于用户与密码	auth_basic_module
	[root@oldboy-pythonedu ~]# yum install httpd-tools -y
	[root@oldboy-pythonedu nginx]# htpasswd -c -b password_file oldboy 123
	[root@oldboy-pythonedu nginx]# cat password_file 
	oldboy:$apr1$7dYbXvco$LSJaBM3HqlK3k1kkRt2Ya.
    <整理添加>
	[root@cwj-python ~]# echo "test" >> /code/mirror/file
	[root@cwj-python ~]# cd /code/mirror/
	[root@cwj-python mirror]# mkdir 公司资料包
	[root@cwj-python mirror]# mkdir 公司代码
	[root@cwj-python mirror]# mkdir 公司文件
	[root@cwj-python ~]# cd /code/mirror/
	[root@cwj-python mirror]# ls
	file  公司代码  公司文件  公司资料包
	[root@cwj-python mirror]# cd 公司资料包/
	[root@cwj-python 公司资料包]# rz
	
	nginx配置文件:
	server {
		listen 80;
		server_name mirror.oldboyedu.com;
		charset utf8;

		auth_basic "hello,nginx";				# 描述信息
		auth_basic_user_file password_file;		# 定义密码文件名称

		location / {
			root /code/mirror;
			autoindex on;
			autoindex_exact_size off;
			autoindex_localtime on;
		}
	}

展示: /work 需要密码 /public 无需密码

[root@oldboy-pythonedu ~]# mkdir /basic/{work,public} -p
[root@oldboy-pythonedu mirror]# cat /etc/nginx/conf.d/basic.oldboyedu.com.conf 
server {
	listen 80;
	server_name basic.oldboyedu.com;
	root /basic;
	autoindex on;
	auth_basic "hello,nginx";				
	auth_basic_user_file password_file;

	location / {
	}

	location /work {
		auth_basic "test_work";
		auth_basic_user_file password_file;
	}
}

[root@oldboy-pythonedu mirror]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@oldboy-pythonedu mirror]# systemctl restart nginx

hosts

10.0.0.200 test.oldboyedu.com
10.0.0.200 game.oldboyedu.com
10.0.0.200 mirror.oldboyedu.com
10.0.0.200 basic.oldboyedu.com

猜你喜欢

转载自blog.csdn.net/qq_45957580/article/details/108984390