Nginx configuration - virtual host is based on IP, domain name and port (actual combat!)

Nginx virtual host

  • Domain name based virtual host
  • Virtual host based on IP address
  • Port based virtual host

1. Install DNS domain name resolution server

1. Install bind server

[root@localhost ~]# yum install bind -y

2. Modify the main configuration file (named.conf)

[root@localhost ~]# vim /etc/named.conf 
options {
                listen-on port 53 { any; };          ##Monitor all
                listen-on-v6 port 53 { ::1; };
                directory       "/var/named";
                dump-file       "/var/named/data/cache_dump.db";
                statistics-file "/var/named/data/named_stats.txt";
                memstatistics-file "/var/named/data/named_mem_stats.txt";
                recursing-file  "/var/named/data/named.recursing";
                secroots-file   "/var/named/data/named.secroots";
                allow-query     { any; };           ##Allow all

3. Modify the region configuration file (named.rfc1912.zones)

[root@localhost ~]# vim /etc/named.rfc1912.zones    ##Configure zone profiles
zone "kgc.com" IN {
                type master;
                file "kgc.com.zone";                ##kgc area data profile
                allow-update { none; };                  
};

zone "accp.com" IN {
                type master;
                file "accp.com.zone";             ##accp area data profile
                allow-update { none; };
};

4. Modify the region data configuration file (KGC. Com. Zone ACCP. Com. Zone)

[root@localhost ~]# cd /var/named/  
[root@localhost named]# cp -p named.localhost kgc.com.zone    ##Copy template
[root@localhost named]# vim kgc.com.zone    ##Modify zone profile

$TTL 1D
@       IN SOA  @ rname.invalid. (
                                                            0       ; serial
                                                            1D      ; refresh
                                                            1H      ; retry
                                                            1W      ; expire
                                                            3H )    ; minimum
                NS      @
                A       127.0.0.1
www IN  A       192.168.13.128     ##Native address
[root@localhost named]# cp -p kgc.com.zone accp.com.zone  ##Copy file as accp area data configuration file
[root@localhost named]# systemctl start named      ##Start dns Service
[root@localhost named]# systemctl stop firewalld.service    ##Turn off firewall
[root@localhost named]# setenforce 0

5. Create the site directory of two websites and add the content of the first page

[root@localhost ~]# mkdir -p /var/www/html/accp   ##Create accp site
[root@localhost ~]# mkdir -p /var/www/html/kgc     ##Create kgc site
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# ls
accp  kgc
[root@localhost html]# echo "this a accp web" > accp/index.html    ##Create homepage content
[root@localhost html]# echo "this a kgc web" > kgc/index.html        ##Create homepage content

Second, share the required compression package of LAMP on Windows (if you have any questions here, please refer to the previous blog articles)

Third, use remote share to get files and mount them to mnt directory on Linux

[root@localhost ~]# smbclient -L //192.168.100.3 / ා񖓿񖓿ාremote shared access
Enter SAMBA\root's password: 

                Sharename       Type      Comment
                ---------       ----      -------
                LNMP-C7         Disk       
[root@localhost ~]# mount.cifs //192.168.100.3/LNMP-C7 /mnt ××××××××× mount to / mnt directory

4. Compile and install Nginx

1. Unzip the source package to / opt and check

[root@localhost ~]# cd /mnt    ##Switch to mount point directory
[root@localhost mnt]# ls
Discuz_X3.4_SC_UTF8.zip    nginx-1.12.2.tar.gz
mysql-boost-5.7.20.tar.gz  php-7.1.20.tar.gz
[root@localhost mnt]# tar zxvf nginx-1.12.2.tar.gz -C /opt   ##Extract the Nginx source package to / opt
[root@localhost mnt]# cd /opt/    ##Switch to the unzipped directory
[root@localhost opt]# ls
nginx-1.12.2  rh

2. Install the environment component package required for compilation

[root@localhost opt]# yum -y install \
gcc \                                       //c language
gcc-c++ \                        //c++ language
pcre-devel \                     //pcre language tools
zlib-devel                       //Function library for data compression

3. Create program user nginx and compile nginx

[root@localhost opt]# useradd -M -s /sbin/nologin nginx  ##Create program user, safe and non login status
[root@localhost opt]# id nginx
uid=1001(nginx) gid=1001(nginx) group=1001(nginx)
[root@localhost opt]# cd nginx-1.12.0/                 ##Switch to nginx directory
[root@localhost nginx-1.12.0]# ./configure \         ##Configure nginx
> --prefix=/usr/local/nginx \        ##Installation path
> --user=nginx \                         ##User name
> --group=nginx \                       ##User group
> --with-http_stub_status_module     ##Status statistics module

4. Compile and install

[root@localhost nginx-1.12.0]# make     ##Compile
...
[root@localhost nginx-1.12.0]# make install   ##install
...

5. Optimize nginx startup script for system identification

[root@localhost nginx]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ 
##Create a soft connection for the system to recognize the nginx startup script
[root@localhost nginx]# nginx -t       ##Check configuration file for syntax problems
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@localhost nginx]# nginx      ##Open ngnix
[root@localhost nginx]# netstat -ntap | grep 80     ##Check the port. nginx is on
tcp   0   0 0.0.0.0:80      0.0.0.0:*   LISTEN   39620/nginx: master 
[root@localhost nginx]# systemctl stop firewalld.service    ##Turn off firewall
[root@localhost nginx]# setenforce 0 
[root@localhost nginx]# nginx                         ##open

6. Make management script for service management

[root@localhost nginx]# cd /etc/init.d/   ##Switch to startup profile directory
[root@localhost init.d]# ls
functions  netconsole  network  README
[root@localhost init.d]# vim nginx         ##Edit startup script file

#!/bin/bash
# chkconfig: - 99 20                                    ##Annotation information
# description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"           ##Set variable to nginx command file
PIDF="/usr/local/nginx/logs/nginx.pid"       ##Set the variable PID file process number to 5346
case "$1" in  
    start)
        $PROG                                              ##Opening service
        ;;
    stop)
        kill -s QUIT $(cat $PIDF)                    ##Shut down service
        ;;
    restart)                                                  ##Restart service
        $0 stop
        $0 start
        ;;
    reload)                                                  ##Heavy load service
        kill -s HUP $(cat $PIDF)
        ;;
    *)                                                           ##Error input prompt
                echo "Usage: $0 {start|stop|restart|reload}"
                exit 1
esac
exit 0
[root@localhost init.d]# chmod +x /etc/init.d/nginx    ##Give startup script execution permission
[root@localhost init.d]# chkconfig --add nginx          ##Add to service manager
[root@localhost init.d]# service nginx stop                ##You can use service to control nginx
[root@localhost init.d]# service nginx start

7. It is also convenient for system CTL management and configuration file (just write one for convenience)

[root@localhost ~]# vim /lib/systemd/system/nginx.service      ##create profile

[Unit]
Description=nginx                                            ##describe
After=network.target                                        ##Describe service type
[Service]
Type=forking                                                    ##Background operation form
PIDFile=/usr/local/nginx/logs/nginx.pid            ##PID file location
ExecStart=/usr/local/nginx/sbin/nginx              ##Startup service
ExecReload=/usr/bin/kill -s HUP $MAINPID    ##Overload configuration according to PID
ExecStop=/usr/bin/kill -s QUIT $MAINPID       ##Terminate process according to PID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

[root@localhost ~]# chmod 754 /lib/systemd/system/nginx.service     ##Set execution permission
[root@localhost ~]# systemctl stop nginx.service       ##Close
[root@localhost ~]# systemctl start nginx.service       ##open

V. virtual host based on different domain names

1. Modify nginx configuration file information

[root@localhost ~]# cd /usr/local/nginx/conf
[root@localhost conf]# vim nginx.conf     ##Modify Nginx configuration file

server {
    listen      80; 
    server_name  www.kgc.com;                       ##kgc website
    charset utf-8;
    access_log  logs/www.kgc.com.access.log;   ##log file
    location / { 
        root   /var/www/html/kgc;                             ##Site directory
        index  index.html index.htm;
    }   
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }   
}   

server {
    listen      80; 
    server_name  www.accp.com;                         ##accp website
    charset utf-8;
    access_log  logs/www.accp.com.access.log;   ##log file
    location / { 
        root   /var/www/html/accp;                            ##Site directory
        index  index.html index.htm;
    }   
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }   
}   
    [root@localhost conf]# service nginx restart    ##Restart nginx service

2. Use the tester to visit websites with different domain names


Vi. virtual host based on different ports

1. Modify nginx configuration file information

[root@localhost ~]# cd /usr/local/nginx/conf
[root@localhost conf]# vim nginx.conf     ##Modify Nginx configuration file

server {
    listen      80; 
    server_name  www.accp.com;
    charset utf-8;
    access_log  logs/www.accp.com.access.log;
    location / { 
        root   /var/www/html/accp;
        index  index.html index.htm;
    }   
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

server {
    listen     192.168.13.138:8080;                                  ##Modify listening port to 8080
    server_name  www.accp.com;                       
    charset utf-8;
    access_log  logs/www.accp8080.com.access.log;    ##Log file changed to 8080
    location / {
        root   /var/www/html/accp8080;                             ##Site directory for port 8080
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

2. Create the directory of accp8080 site and the content of the first page

[root@localhost conf]# cd /var/www/html/                ##Switch to site directory
[root@localhost html]# mkdir accp8080                   ##Create site directory
[root@localhost html]# cd accp8080/
[root@localhost accp8080]# echo "this is accp8080 web" > index.html   ##Create homepage content
[root@localhost accp8080]# service nginx restart    ##Restart Nginx service

3. Use the tester to visit websites on different ports


VII. Virtual hosts based on different IP addresses

1. Add a network card to the virtual machine

192.168.13.138
192.168.13.133

2. Modify dns area data configuration file

[root@localhost ~]# cd var/named/
[root@localhost named]# vim kgc.com.zone    ##Modify the area data configuration file of kgc
$TTL 1D
@       IN SOA  @ rname.invalid. (
                                                        0       ; serial
                                                        1D      ; refresh
                                                        1H      ; retry
                                                        1W      ; expire
                                                    3H )    ; minimum
                NS      @
                A       127.0.0.1
www IN  A       192.168.13.133                   ##The address is 133.
[root@localhost named]# vim accp.com.zone  ##Modify the area data configuration file of accp
$TTL 1D
@       IN SOA  @ rname.invalid. (
                                                            0       ; serial
                                                            1D      ; refresh
                                                            1H      ; retry
                                                            1W      ; expire
                                                            3H )    ; minimum
                NS      @
                A       127.0.0.1
www IN  A       192.168.13.138       ##The address is 138.
[root@localhost named]# systemctl restart named   ##Restart dns Service

3. Modify nginx configuration file information

[root@localhost ~]# cd /usr/local/nginx/conf
[root@localhost conf]# vim nginx.conf     ##Modify Nginx configuration file
    server { 
    listen     192.168.13.133:80;      ##specify an IP address
    server_name  www.kgc.com;
    charset utf-8;
    access_log  logs/www.kgc.com.access.log;
    location / { 
        root   /var/www/html/kgc;
        index  index.html index.htm;
    }   
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }   
}   

server {
    listen      192.168.13.138:80;    ##specify an IP address
    server_name  www.accp.com;
    charset utf-8;
    access_log  logs/www.accp.com.access.log;
    location / { 
        root   /var/www/html/accp;
        index  index.html index.htm;
    }   
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }   
}  
    [root@localhost conf]# service nginx restart    ##Restart Nginx service

4. Use the tester to visit different IP websites


Thank you for reading!

Tags: Linux Nginx vim DNS network

Posted on Mon, 04 Nov 2019 19:32:10 -0500 by wowiz