nginx虛擬主機實戰

不太聪明的大鹅發表於2024-03-17

基於nginx部署網站

為什麼配置虛擬主機

單虛擬主機

只需要在http{}區域中,設定一個 server{}標籤即可

部署一個 huoying.linux0224.cc   看到 /www/huoying/index.html


配置檔案如下
降低執行許可權

[root@web-8 ~]#groupadd www -g 666
[root@web-8 ~]#
[root@web-8 ~]#useradd www -u 666 -g 666 -M -s /sbin/nologin 
[root@web-8 ~]#
[root@web-8 ~]#
[root@web-8 ~]#id www
uid=666(www) gid=666(www) groups=666(www)

nginx.conf入口配置檔案

user  www;		# 設定執行使用者 
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    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        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;   # include匯入該目錄下的*.conf配置檔案
}

建立虛擬主機子配置檔案
只需要寫server{}標籤即可

# huoying.linux0224.cc
# 吧資料放在 /www/huoying/index.html

vim /etc/nginx/conf.d/huoying.linux0224.conf 
# 寫入如下資訊

server { 
	
	listen 80;
	# nginx會匹配 http://huoying.linux0224.cc:80
	server_name huoying.linux0224.cc;
	# 支援中文的引數
	charset utf-8;
	location  /  {
		# 根據root引數,填寫網頁根目錄資訊
		# 表示當你訪問 http://huoying.linux0224.cc:80 ,自動來這個目錄下找資料
		root  /www/huoying/;
		# 預設找 /www/huoying/ 的名字叫做index.html的檔案
		index  index.html;
	}
	
}



# 建立網頁靜態檔案,index.html 鳴人.jpg  鳴人與佐助的秘密.txt
# 你部署一個靜態網站,最基本的提供,html,jpg,txt等靜態資料
# nginx都可以幫你去返回,解析請求
# 
mkdir -p /www/huoying

cat > /www/huoying/index.html <<EOF
<meta charset=utf-8>
我是火影頁面,老六你好。
EOF

cd /www/huoying ; wget -O 鳴人.jpg https://pics0.baidu.com/feed/d62a6059252dd42a57f830e3671230b2c8eab8b1.jpeg?token=df950341a2fc3467a01012e87e868f08

cd /www/huoying ; echo '佐助其實打不過鳴人' > 鳴人與佐助的秘密.txt


# 修改靜態檔案的屬主,屬組
[root@web-8 /www/huoying]#chown -R www.www /www/

測試nginx配置檔案語法,然後啟動

[root@web-8 /www/huoying]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

[root@web-8 /www/huoying]#systemctl restart nginx

根據域名訪問該虛擬主機

你的本地新增好dns域名解析
分別新增二級域名,三級域名,hosts解析

10.0.0.8  huoying.linux0224.cc linux0224.cc   


你可以先訪問ip試試,通不通
[C:\~]$ ping huoying.linux0224.cc 

正在 Ping huoying.linux0224.cc [10.0.0.8] 具有 32 位元組的資料:
來自 10.0.0.8 的回覆: 位元組=32 時間<1ms TTL=64
來自 10.0.0.8 的回覆: 位元組=32 時間<1ms TTL=64

html檔案資源

圖片資源

普通txt檔案資源

nginx識別的檔案型別都在這個檔案裡定義好了

[root@web-8 /www/huoying]#cat /etc/nginx/mime.types 

只有這個檔案中定義的檔案型別,nginx預設可以識別處理。。

nginx的配置檔案匹配


規整,刪除無用的配置檔案

[root@web-7 /etc/nginx/conf.d]#rm -rf default.conf  

IP多虛擬主機

給指定的網路卡,繫結多個ip地址
# 這個命令是臨時新增一個ip
ip addr add 10.0.0.88/24 dev eth0

不得有人在用

修改虛擬主機,繫結多個ip

vim /etc/nginx/conf.d/88.conf

# 指定繫結ip地址的配置檔案
[root@web-8 /etc/nginx/conf.d]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web-8 /etc/nginx/conf.d]#
[root@web-8 /etc/nginx/conf.d]#
[root@web-8 /etc/nginx/conf.d]#
[root@web-8 /etc/nginx/conf.d]#ls
88.conf  huoying.linux0224.conf
[root@web-8 /etc/nginx/conf.d]#cat 88.conf 
server {

listen 10.0.0.88:80;
server_name _;

location /  {
	root  /www/80/;
	index  index.html;
}

}

# 建立測試資料
[root@web-8 /etc/nginx/conf.d]#mkdir -p /www/80/
[root@web-8 /etc/nginx/conf.d]#
[root@web-8 /etc/nginx/conf.d]#echo 'I am 10.0.0.88 server. welcome my linux'  > /www/80/index.html
[root@web-8 /etc/nginx/conf.d]#
[root@web-8 /etc/nginx/conf.d]#
[root@web-8 /etc/nginx/conf.d]#systemctl restart nginx

測試基於ip的虛擬主機

1. 當你訪問 10.0.0.8 或者 huoying.linux2004.cc
看到的是/etc/nginx/conf.d/huoying.linux0224.conf這個虛擬主機的內容

2. 當你訪問,基於指定ip訪問,看到的/etc/nginx/conf.d/88.conf的內容

給這個指定的IP,繫結一個測試域名

修改本地hosts
10.0.0.88  88.linux0224.cc

訪問該域名也是可以通的,因為依然是基於繫結的socket地址匹配的該虛擬主機檔案
http://88.linux0224.cc/

多域名虛擬主機

dnf.linux0224.cc   /www/lol/index.html


lol.linux0224.cc   /www/lol/index.html

倆域名,就得分倆配置檔案更合適些,表示是2個站點

建立各自的配置檔案
dnf.linux0224.conf

[root@web-8 /etc/nginx/conf.d]#touch dnf.linux0224.conf

分別寫入配置 ,基於域名的虛擬主機,這樣寫
server {

    listen 80;
    server_name dnf.linux0224.cc; # 這裡寫的是域名
	charset utf-8;
    location /  {
        root  /www/dnf/;
        index  index.html;
    }

}

lol.linux0224.conf

server {

    listen 80;
    server_name lol.linux0224.cc;
	charset utf-8;
    location /  {
        root  /www/lol/;
        index  index.html;
    }

}

建立兩個資料目錄即可

mkdir -p /www/{lol,dnf}

# 分別建立測試資料

echo '人在塔在,人在linux在'  >  /www/lol/index.html 

echo '勇士,好好學習linux,你就是最帥的'  >  /www/dnf/index.html 

[root@web-8 /etc/nginx/conf.d]#systemctl restart nginx

重啟nginx,檢視各自的網站

還差什麼步驟嗎?
還差客戶端機器上的 域名解析

10.0.0.8  huoying.linux0224.cc linux0224.cc     lol.linux0224.cc       dnf.linux0224.cc        


http://lol.linux0224.cc/

http://dnf.linux0224.cc/

多埠虛擬主機

除了支援

  • 繫結域名
  • 繫結ip
  • 繫結多個埠,的虛擬主機

在一個配置檔案中,定義多個虛擬主機

vim /etc/nginx/conf.d/port.conf
# 平級
server {

    listen 10.0.0.8:81;
    server_name _;
	charset utf-8;
    location /  {
        root  /www/data81/;
        index  index.html;
    }

}
 # 平級
server {

    listen 10.0.0.8:82;
    server_name _;
	charset utf-8;
    location /  {
        root  /www/data82/;
        index  index.html;
    }

}


# 建立測試資料,   看懂扣6 不懂7 
mkdir -p /www/{data81,data82}

cd /www/data81 ;  echo "我是81,你是老六" > /www/data81/index.html

cd /www/data82 ;  echo "我是82,你是秘製小漢堡" > /www/data82/index.html

重啟服務,檢視是否生效

[root@web-8 /www/data82]#systemctl restart nginx

測試訪問81和82頁面

相關文章