(三)Nginx基于IP和域名配置

Nginx的基本配置

  • Nginx的配置文件
  • 虚拟主机的配置
    • 配置基于IP的虚拟主机
      • 查看自己网络设备的名称
      • 添加ip别名
    • 配置基于域名的虚拟主机

Nginx的配置文件

配置文件结构主要有以下几部分构成

…………
events
{
	…………
}
http
{
	server			//虚拟主机的配置每个server就是一个独立的虚拟主机
	{
		…………
	}
	server
	{
		…………
	}
	server
	{
		…………
	}		
}

配置文件简单示例和说明


#使用的用户和组
user  nginx;

#启动进程,通常设置成和cpu的数量相等
worker_processes  1;

#指定错误日志存放的路径,错误日志记录级别可选项为:[debug | info | notice | warn | eeror | crit]
error_log  /var/log/nginx/error.log warn;

#指定PID文件的存放路径
pid        /var/run/nginx.pid;



#工作模式及连接数上限
events {
    #使用的网络I/O模型,Linux系统推荐采用epoll模型,FreeBSD系统推荐采用kqueue模型
	use epoll;
	
    worker_connections  1024;	#单个后台worker process进程的最大并发链接数
}

#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {

    #设定mime类型(邮件支持类型),类型由mime.types文件定义
	include       /etc/nginx/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  /var/log/nginx/access.log  main;

	#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
    #必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
    sendfile        on;
    #tcp_nopush     on;

	#连接超时时间
    keepalive_timeout  65;
	
	#gzip压缩开关
    #gzip  on;

    include /etc/nginx/conf.d/*.conf;		//包含虚拟主机的配置文件即上面的http服务器部分
}

下面打开一个默认的default.conf看看


#HTTP服务器
server {

	#监听80端口,80端口是知名端口号,用于HTTP协议
    listen       80;
	
	#主机名称
    server_name  localhost;
	
	
	#编码格式
    #charset koi8-r;
	
	#访问日志文件存放位置
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
		#HTML网页文件存放的目录
        root   /usr/share/nginx/html;
		#默认首页文件,顺序从左到右,如果找不到index.html文件,则查找index.htm文件作为首页文件
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

虽然示例的配置文件是由多个文件组成(新版本),但是本质上还是一样的;

虚拟主机的配置

配置基于IP的虚拟主机

添加IP别名,在同一块物理网卡上绑定多个IP,实现使用单一网卡的同一个服务器上运行多个基于IP的虚拟主机。

查看自己网络设备的名称

[root@~ /]# ifconfig
enp2s0: flags=4163  mtu 1500
        inet 192.168.8.119  netmask 255.255.255.0  broadcast 192.168.8.255
        inet6 240e:d8:522:201:dc72:9b23:96d0:6  prefixlen 128  scopeid 0x0
        inet6 fddc:729b:2396:d000:932:7ebe:518e:2228  prefixlen 64  scopeid 0x0
        inet6 fe80::8f20:ca10:d734:8d67  prefixlen 64  scopeid 0x20
        inet6 240e:d8:522:201:fb83:4e4c:47d6:747f  prefixlen 64  scopeid 0x0
        ether xx:xx:xx:xx:xx:xx  txqueuelen 1000  (Ethernet)
        RX packets 1170  bytes 115377 (112.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 829  bytes 166942 (163.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 68  bytes 5912 (5.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 68  bytes 5912 (5.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

我的网卡设备就是enp2s0, lo是本地环回;

添加ip别名

使用指令为enp2s0添加ip别名

ifconfig enp2s0:0 192.168.8.250  netmask  255.255.255.0 up

ifconfig enp2s0:1 192.168.8.251  netmask  255.255.255.0 up

再使用ifconfig命令查看

[root@6~ /]# ifconfig
enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.8.119  netmask 255.255.255.0  broadcast 192.168.8.255
        inet6 240e:d8:522:201:dc72:9b23:96d0:6  prefixlen 128  scopeid 0x0<global>
        inet6 fddc:729b:2396:d000:932:7ebe:518e:2228  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::8f20:ca10:d734:8d67  prefixlen 64  scopeid 0x20<link>
        inet6 240e:d8:522:201:fb83:4e4c:47d6:747f  prefixlen 64  scopeid 0x0<global>
        ether xx txqueuelen 1000  (Ethernet)
        RX packets 1560  bytes 161079 (157.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1128  bytes 217756 (212.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp2s0:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.8.250  netmask 255.255.255.0  broadcast 192.168.8.255
        ether xx txqueuelen 1000  (Ethernet)

enp2s0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.8.251  netmask 255.255.255.0  broadcast 192.168.8.255
        ether xx txqueuelen 1000  (Ethernet)

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 68  bytes 5912 (5.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 68  bytes 5912 (5.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

添加完成后ping添加的IP 能够ping通则证明配置无误;但是此方式添加的ip别名在重启之后会消失,不过可以将此命令添加到 /etc/rc.local文件中,让系统开机后自动运行;

添加完IP之后就通过配置文件让虚拟主机监听这些ip

http
{
	#第一个虚拟主机
	server
	{
		#监听的IP和端口
		listen 192.168.8.250:80		//也可以不写ip只写端口
		#主机名称
		server_name 192.168.8.250
		……
	}
	#第二个虚拟主机
	server
	{
		#监听的IP和端口
		listen 192.168.8.251:80		//也可以不写ip只写端口
		#主机名称
		server_name 192.168.8.251
		……
	}	
	…………
}

配置基于域名的虚拟主机

基于域名的虚拟主机是最常见的一种虚拟主机,这种技术,使很多虚拟主机可以共享同一IP址,有效解决了IP地址不足的问题

http
{
	server
	{
		#监听的端口
		listen 80		 
		#主机名称
		server_name aaa.domain.com
		……
	}
	server
	{
		#监听的端口
		listen 80		 
		#主机名称
		server_name bbb.otherdomain.com
		……
	}
	server
	{
		#监听的端口
		listen 80		 
		#主机名称
		server_name www.domain.com domain.com *.domain.com
		………
	}	
}

第一个虚拟主机表示所有对域名aaa.domain.com访问都有它来处理;
第二个虚拟主机表示所有对域名bbb.otherdomain.com访问都有它来处理;
第三个虚拟主机表示对域名www.domain.com 、domain.com以及除了aaa.domain.com之外的所有x.domain.com的二级域名的访问都由它来处理。

你可能感兴趣的:(自学笔记)