虚拟主机配置文件理解和常用功能

基础信息

yum安装nginx后的配置文件为

/etc/nginx/conf.d/*.conf

下面是一个带有很多功能的配置文件,可以从中选择你需要的部份,理解和使用你需要的部份。

非必要意思是没有这些配置,网站也可以跑,是一种功能,视情况选择;

必要是没有这些配置,网站就不能跑;

连接主机的基础操作可以参考以下链接:

https://blog.csdn.net/tanyyinyu/article/details/98786545

网站根目录下 /jiami/1.txt 可以使用浏览器通过 域名 + /jiami/1.txt 来查看;另外可通过curl命令来模拟访问网站,看其返回信息来确认配置文件是否正确,curl命令很方便,有些配置只能通过这个方式测试。

以下是一般用的命令格式:

curl -x127.0.0.1:80 bbs.tany.com -I #-x使用后面指定的IP和端口访问网站,本机测试使用,-I显示响应的文档头,不显示具体网站内容
curl -x127.0.0.1:80 -u username:pw bbs.tany.com/jiami/1.txt -I #测试认证;
curl -x127.0.0.1:80 --refer blog.tany.com http://bbs.tany.com/static/image/common/forum.gif -I -v #测试盗链接;
curl -v -A ‘aaaaaspider/3.0’ -e “1111” -x127.0.0.1:80 bbs.tany.com -I #测试user-agent

第一条命令返回的结果:

curl -x127.0.0.1:80 bbs.tany.com -I
HTTP/1.1 200 OK	#状态码200代表正常访问;
Server: nginx/1.16.0
Date: Sat, 10 Aug 2019 17:33:07 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
X-Powered-By: PHP/7.3.0
状态码 状态码英文名称 中文描述
301 Moved Permanently 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302 Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
也要学会看日志文件,下面有具体配置,查看日志的命令:

tail /data/logs/bbs.access.log #名字可自己设置*.log;

日志格式说明:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

意思分别包括,访问地址,访问用户(认证后才有),时间,请求,状态码,数据量,referer,浏览器相关信息,代理

详细配置与理解:

	server {
    listen 80;	#默认句子,改成listen 80 default_server; 变成默认虚拟主机,改动非必要;
    server_name	bbs.tany.com www.tanybbs.com;  #设置了两个域名,设置一个就可以,可以尝试到域名重定向,永久转移,状态301;

    #charset koi8-r;	#字符默认注释掉;

	location /jiami/	#目录/jiami/认证进入,非必要,需要输入密码才能访问,如做在根目录,改成location /;
	{
	auth_basic "Restricted Access";	#个人觉得认证用处不大;
	auth_basic_user_file /etc/nginx/user_passwd;	#安装httpd-tools,命令htpasswd -c /etc/nginx/user_passwd user1创建第一个用户,再加用户的命令是htpasswd -m /etc/nginx/user_passwd user2;
	}
	#用作二次认证的情况:对于网页用户名认证后出来的URL,作一个location,再进行一个认证,这个就是二次认证,认证后再正常访问网页。我做的实验第二个认证后面是一些PHP页面,只成功显示一次,后面再访问就不成功了。
	#认证有时候弹出来,有时候不弹出来。
	#用一个浏览器做了测试后,这个认证会被一直记录,所以安全性和可用性不高,知道有这个功能就好,会有更好的工具实现这个功能。	
	
	if ( $host = www.tanybbs.com )	#这个if段就是域名重定向,非必要,可以整段删除;
    {
    rewrite /(.*)  http://bbs.tany.com/$1 permanent;	# /(.*) 斜杠左边空(即$host)会变成http://bbs.tany.com, 右边成为一个参数代入$1;
	}	#指向www.tanybbs.com的访问会重定向到bbs.tany.com;
	
	rewrite 1.txt 2.txt redirect;	#非必要,页面的重定向,1.txt转到2.txt,这个会显示临时转移,状态302;
	
	root   /data/wwwroot/bbs.tany.com;			#必要,全局的网站根目录,原来是location语句,改成这样也没问题;
	index  index.html index.htm index.php;		#必要,进入根目录会选择显示的文件名称,网站首页名字要选择其中一个;

	location /admin/ {	#非必要,限制对含有/admin/URL或者说限制/admin/目录的访问,如bbs.tany.com/admin/123.html;
	allow 127.0.0.1;	#这个IP可以访问;
	allow 192.168.31.0/24;	#这个IP可以访问;
	deny all;	#其他不能访问,这个写法是白名单,还有黑名单写法;
	}
 
 	location ~ .*(upload|image|attachment|cache)/.*\.(php|pl|py|jsp|asp|sh|cgi)$	#非必要,防止可以上传文件的目录上传了脚本;
	{	#.*为贪婪匹配,转义字符\将.变成点不会指代任意一个字母;
	deny all; #符合的格式,都是403;
	}
if ($http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato')	#非必要,识别发送信息的浏览器,屏敝掉一些浪费流量的机器人;
	{
return 403;	#返回代码可以自已选择;
	}

	if ($request_uri ~ (abc|123))	#非必要,指定的限制URL,带有abc或123的URL都返回404;
	{
return 404;	#返回代码可以自已选择;
}
    location ~ \.php$ {						#必要,网站要支持PHP这个段都是需要的;
	root	/data/wwwroot/bbs.tany.com;	#改成跟网站根目录一样;
	fastcgi_pass   127.0.0.1:9000;
	fastcgi_index  index.php;
	fastcgi_param  SCRIPT_FILENAME  /data/wwwroot/bbs.tany.com$fastcgi_script_name;	#对应修改;
	include	fastcgi_params;
    }
	location ~* \.(png|jpeg|gif|js|css|bmp|flv)$	#非必要,防盗链、更新时间和日志设置;
	{
	valid_referers none blocked tanybbs.com *.tanybbs.com;	#访问上面文件类型时,不接受refer,除了自己的域名作为refer;
	if ($invalid_referer) {	#除了自己域名都是非法refer;
	return 403;	#非法refer返回403; 如果不做这个操作,其他网站通过文件的链接访问时,会通过你的服务器发给客户端,浪费服务器资源;
	}
	expires 1d;	#对于上面这些文件,服务器发送后,一天内再访问不再发送,第二天再访问会更新;
	access_log off;	#对于上面这些文件,不记录日志;
	}
access_log  /data/logs/bbs.access.log  main;	#非必要,增加日志目录,默认var里有日志,更新配置自动生成;main为格式,在/etc/nginx/nginx.conf里定义;
}

日志切割功能

防止日志的不断堆积,可以设置成每天生成一个文件,7天后覆盖。
配置文件如下:

etc/logrotate.d/nginx

写入以下内容:

	/var/log/nginx/*.log  {	#默认配置,可以增加自己新增的日志目录进去;
	daily	#每天;
	dateext	#按日期命名;
	missingok	#忽略错误;
	rotate 7		#7天覆盖;
	compress	#压缩;
	delaycompress	#延时压缩,压宿前天的文件;
	notifempty			#空文件不切割;
	create 640 nginx adm	#生成文件的用户和用户组;
	sharedscripts		#后面代表切割后,重新加载配置文件,写入日志到新文件;
	postrotate
	if [ -f /var/run/nginx.pid ]; then
	kill -USR1 `cat /var/run/nginx.pid`
	fi
	endscript
} 

有日志内容的情况下,可以测试切割

logrotate -vf /etc/logrotate.d/nginx

你可能感兴趣的:(linux,高级部分)