Nginx实战

虚拟主机

虚拟主机指的就是⼀个独⽴的站点,具有独⽴的域名,有完整的www服务,例如⽹站、FTP、邮件等 。Nginx⽀持多虚拟主机,在⼀台机器上可以运⾏完全独⽴的多个站点。⼀些草根流量站⻓,常会搭建个⼈站点进⾏资源分享交流,并且可能有多个不同业务的站点,如果每台服务器只运⾏⼀个⽹站,那么将造成资源浪费,成本浪费。利⽤虚拟主机的功能,就不⽤为了运⾏⼀个⽹站⽽单独配置⼀个Nginx服务器,或是单独再运⾏⼀组Nginx进程。虚拟主机可以在⼀台服务器,同⼀个Nginx进程上运⾏多个⽹站。

搭建网站

搭建一个静态网站,修改nginx.conf,⾃上⽽下找到第⼀个server{}指令块, 修改如下
 server {
	 listen 80;
	 server_name localhost;
	 #默认编码
	 charset utf-8;
	 # access_log logs/host.access.log  main;
	 location / {
		 #定义虚拟主机的资源目录,无论win或linux都要写成正斜杠
		 root C:/Users/zhang/Desktop/new;
		 #定义首页文件的名字
		 index index.html index.htm;
	 }
 
   }

执行命令 

// 检查配置是否正确
nginx -t
// 启动
nginx
// 重新加载Nginx配置文件
nginx -s reload

准备资源

访问localhost

访问静态资源

 

 nginx⽀持gzip对资源压缩传输,经过gzip压缩后的⻚⾯⼤⼩可以为原本的30%甚⾄更⼩,⽤户浏览体验会快很多


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#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;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    // 开启压缩
    gzip on;
    gzip_http_version 1.1;
    gzip_comp_level 4;
    gzip_types text/plain application/javascript
    application/x-javascript text/css application/xml
    text/javascript application/x-httpd-php image/jpeg image/gif
    image/png;

   server {
	 listen 80;
	 server_name localhost;
	 #默认编码
	 charset utf-8;
	 # access_log logs/host.access.log  main;
	 location / {
		 #定义虚拟主机的资源目录,无论win或linux都要写成正斜杠
		 root C:/Users/zhang/Desktop/new;
		 #定义首页文件的名字
		 index index.html index.htm;
	 }
 
   }

}

下载站点功能

nginx使用的是模块ngx_http_autoindex_module来实现的,该模块处理以斜杠("/")结尾的请求,并生成目录列表。nginx编译的时候会自动加载该模块,但是该模块默认是关闭的,我们需要使用下来指令来完成对应的配置

autoindex

启用或禁用目录列表输出

语法autoindex on|off;
默认值autoindex off;
位置http、server、location

autoindex_exact_size

对应HTLM格式,指定是否在目录列表展示文件的详细大小

默认为on,显示出文件的确切大小,单位是bytes。 改为off后,显示出文件的大概大小,单位是kB或者MB或者GB

语法autoindex_exact_size on|off;
默认值autoindex_exact_size on;
位置http、server、location

autoindex_format

设置目录列表的格式

语法autoindex_format html|xml|json|jsonp;
默认值autoindex_format html;
位置http、server、location

注意:该指令在1.7.9及以后版本中出现

autoindex_localtime

对应HTML格式,是否在目录列表上显示时间。

默认为off,显示的文件时间为GMT时间。 改为on后,显示的文件时间为文件的服务器时间

语法autoindex_localtime on | off;
默认值autoindex_localtime off;
位置http、server、location

配置方式如下

location /download{
    root /usr/local;
    autoindex on;
    autoindex_exact_size on;
    autoindex_format html;
    autoindex_localtime on;
}

修改nginx.conf支持游览目录


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#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;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    # gzip on;


        #第一个虚拟主机
	server {
		#监听的端口和ip
		listen 80;
		#主机域名
		server_name www.test1.com;

		charset utf-8;

		 access_log logs/host.access.log;
		 #url匹配
		 location / {
			 #HTML文件存放的目录
			  root C:/Users/zhang/Desktop/new/web2;
			  #开启目录索引功能
			  autoindex on;
			  #关闭详细文件大小统计,让文件大小显示MB,GB单位,默认为b; 
			  autoindex_exact_size off;
			  #开启以服务器本地时区显示文件修改日期!  
			  autoindex_localtime on;        
		 }
	}

}

 访问

基于IP多虚拟主机

修改 nginx.conf ⽀持多虚拟主机

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#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;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    gzip on;
    gzip_http_version 1.1;
    gzip_comp_level 4;
    gzip_types text/plain application/javascript
    application/x-javascript text/css application/xml
    text/javascript application/x-httpd-php image/jpeg image/gif
    image/png;

        #第一个虚拟主机
	server {
		#监听的端⼝和ip
		listen 127.0.0.1:80;
		#主机域名
		server_name 127.0.0.1;

		charset utf-8;

		 access_log logs/host.access.log;
		 #url匹配
		 location / {
			 #HTML文件存放的目录
			  root C:/Users/zhang/Desktop/new/web1;
			#默认首页文件,从左往右寻找,index.html或是index.htm
			 index index.html index.htm;
		 }
	}


	
	 #第二个虚拟主机
	 server {
		 listen 192.168.52.100:80;
		 server_name 192.168.52.100;
		 location / {
		 index index.html index.htm;
		 root C:/Users/zhang/Desktop/new/web2;
		 }
	 }
}

执行命令

#重载nginx
nginx -s reload

访问站点一

访问站点二

基于域名多虚拟主机

 基于多IP的虚拟主机可能会造成IP地址不⾜的问题,如果没有特殊需求,更常⽤的是基于多域名的形式。只需要你单独配置DNS服务器,将主机名对应到正确的IP地址,修改Nginx配置,可以识别到不同的主机即可,这样就可以使得多个虚拟主机⽤同⼀个IP,解决了IP不足的隐患。

打开C:\Windows\System32\drivers\etc,配置域名。 

修改 nginx.conf ⽀持多域名的虚拟主机

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#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;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    gzip on;
    gzip_http_version 1.1;
    gzip_comp_level 4;
    gzip_types text/plain application/javascript
    application/x-javascript text/css application/xml
    text/javascript application/x-httpd-php image/jpeg image/gif
    image/png;

        #第一个虚拟主机
	server {
		#监听的端?和ip
		listen 80;
		#主机域名
		server_name www.test1.com;

		charset utf-8;

		 access_log logs/host.access.log;
		 #url匹配
		 location / {
			 #HTML文件存放的目录
			  root C:/Users/zhang/Desktop/new/web1;
			#默认首页文件,从左往右寻找,index.html或是index.htm
			 index index.html index.htm;
		 }
	}


	
	 #第二个虚拟主机
	 server {
		 listen 80;
		 server_name www.test2.com;
		 location / {
		 index index.html index.htm;
		 root C:/Users/zhang/Desktop/new/web2;
		 }
	 }
}

执行命令

#重载nginx
nginx -s reload

访问域名1

访问域名2

基于端口多虚拟机

基于端⼝的配置在⽣产环境⽐较少⻅,⽤于特殊场景,例如公司内部测试平台⽹站,使⽤特殊端⼝的后台,OA 系统、⽹站后台, CRM 后台等。

修改nginx.conf⽀持多域名的虚拟主机


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#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;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    gzip on;
    gzip_http_version 1.1;
    gzip_comp_level 4;
    gzip_types text/plain application/javascript
    application/x-javascript text/css application/xml
    text/javascript application/x-httpd-php image/jpeg image/gif
    image/png;

        #第一个虚拟主机
	server {
		#监听的端口和ip
		listen 80;
		#主机域名
		server_name www.test1.com;

		charset utf-8;

		 access_log logs/host.access.log;
		 #url匹配
		 location / {
			 #HTML文件存放的目录
			  root C:/Users/zhang/Desktop/new/web1;
			#默认首页文件,从左往右寻找,index.html或是index.htm
			 index index.html index.htm;
		 }
	}


	
	 #第二个虚拟主机
	 server {
		 listen 81;
		 server_name www.test1.com;
		 location / {
		 index index.html index.htm;
		 root C:/Users/zhang/Desktop/new/web2;
		 }
	 }
}

执行命令

#重载nginx
nginx -s reload

访问端口80

访问端口81

root和alias区别

1. Nginx的配置文件server中指定两个location执行,分别为root和alias的指令

location /test/{
    alias /www/test/;
}

按照上述配置,则访问/test/目录里面的文件时,nginx会去/www/test目录找文件

location /test/{
    root /www/test;
}

按照上述配置,则访问/test/目录下的文件时,nginx会去/www/test/test/目录下找文件

2.alias是一个目录别名的定义,root则是最上层目录的定义。

3,另一个区别是alias后面必须要用"/"结束,否则会找不到文件,而root则对"/"可有可无

4.不少人都有误区,认为root是指的/www/test目录下,但是应该是/www/test/test目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值