亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

nginx實(shí)現(xiàn)單主機(jī)多域名映射的項(xiàng)目實(shí)踐

 更新時(shí)間:2025年02月13日 10:41:00   作者:林克在思考  
本文主要介紹了nginx實(shí)現(xiàn)單主機(jī)多域名映射的項(xiàng)目實(shí)踐,配置不同的子域名映射到不同的內(nèi)部服務(wù)端口,具有一定的參考價(jià)值,感興趣的可以了解一下

最近遇到的一個(gè)小問(wèn)題,記錄了一下解決過(guò)程,寫出來(lái)分享給大家。

背景

因?yàn)榍岸螘r(shí)間買了騰訊云3年的云服務(wù)器,準(zhǔn)備偶爾寫點(diǎn)后臺(tái)代碼放上去。正好最近也在計(jì)劃寫個(gè)小程序,用這個(gè)云服務(wù)器作為后臺(tái)。但是微信小程序必須要求使用已經(jīng)備案的域名和80端口,但是只有一臺(tái)云服務(wù)器,一個(gè)80端口,如果我想用這臺(tái)云服務(wù)器作為多個(gè)小程序的后臺(tái),那就不能滿足需求了。

想著要是能夠?qū)⒍鄠€(gè)子域名都解析到我的云服務(wù)器上,然后再通過(guò)不同的子域名映射到我云服務(wù)器的不同端口,這樣,對(duì)外看起來(lái)是多個(gè)子域名并且是80端口,但是其實(shí)背后只有一臺(tái)云服務(wù)器。

本來(lái)也就是想想,正好有個(gè)好朋友最近也遇到了這個(gè)需求,就直接準(zhǔn)備搞一下,找找具體的解決方法。

解決方案

剛開始的想法是這樣的,在我的云服務(wù)器上裝個(gè)Tomcat,然后將Tomcat監(jiān)聽端口從8080改為80。然后自己寫個(gè)Java Web的程序,接受所有發(fā)到80端口的請(qǐng)求,然后再獲得請(qǐng)求的子域名,根據(jù)不同的子域名轉(zhuǎn)發(fā)請(qǐng)求到不同的內(nèi)部服務(wù)的其他端口。但是感覺自己寫,可能沒法很好地處理,造成性能很低,遂作罷。

然后又上網(wǎng)找了一下其他方案,然后發(fā)現(xiàn)了nginx。nginx是一個(gè)高性能的HTTP反向代理服務(wù)器,關(guān)于它的介紹,這里不再贅述,大家可以自行搜索資料了解。這里的nginx服務(wù)器可以通過(guò)配置,監(jiān)聽80端口,并且可以將80端口的請(qǐng)求根據(jù)不同的子域名轉(zhuǎn)發(fā)到不同的內(nèi)部端口,正好滿足了我的需求,所以選定了nginx來(lái)實(shí)現(xiàn)。

具體實(shí)施

下面來(lái)實(shí)戰(zhàn)演示整個(gè)過(guò)程。

演示環(huán)境

云服務(wù)器使用的是Ubuntu16.04

安裝nginx服務(wù)器

使用下面的命令安裝nginx。

sudo apt install nginx

配置nginx服務(wù)器

在安裝完nginx服務(wù)器以后,nginx的配置文件在/etc/nginx/nginx.conf,然后我么看到這個(gè)配置文件中有這樣的一段內(nèi)容。

http {
    #......
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

說(shuō)明nginx的默認(rèn)配置文件中包含加載了這兩個(gè)目錄下的配置文件,所以我們可以在/etc/nginx/conf.d/這個(gè)目錄下創(chuàng)建以.conf結(jié)尾的文件,在里面配置我們的個(gè)性化配置就ok了。

所以我們?cè)?code>/etc/nginx/conf.d/這個(gè)目錄下使用vi創(chuàng)建a.confb.conf來(lái)分別表示我們需要解析映射的兩個(gè)子域名。然后在這兩個(gè)文件中分別寫入下面的內(nèi)容。

server {
    listen       80;
    server_name  a.codekong.cn;
    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://127.0.0.1:3000/;
        proxy_redirect off;
    }
}

其實(shí)我們需要關(guān)注的就兩行內(nèi)容,下面這一行是表示你要映射處理的子域名,我這里是a.codekong.cn

server_name  a.codekong.cn;

還有就是下面這行用來(lái)表示你將這個(gè)子域名的請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器的哪個(gè)端口進(jìn)行處理,這里是3000這個(gè)端口。

proxy_pass http://127.0.0.1:3000/;

同樣的,我們?cè)倥渲靡幌聦?code>b.codekong.cn的請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器內(nèi)部的4000這個(gè)端口,配置文件如下:

server {
    listen       80;
    server_name  b.codekong.cn;
    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://127.0.0.1:4000/;
        proxy_redirect off;
    }
}

這樣就配置好了。

配置域名解析

下面我們開始配置子域名的解析,分別添加a.codekong.cnb.codekong.cn兩個(gè)子域名的解析到我自己的云服務(wù)器,入下圖所示:
這里寫圖片描述
我這里解析配置完后緩存會(huì)在10分鐘后失效,也就是域名解析會(huì)在10分鐘后生效,大家依據(jù)自己的配置來(lái)定。

安裝NodeJS

到上面這一步其實(shí)我們就已經(jīng)成功了,但是我們下面可以使用NodeJs寫一段程序來(lái)驗(yàn)證一下,所以必須先按照下面的命令按照NodeJs。

sudo apt install nodejs
sudo apt install nodejs-legacy
sudo apt install npm

執(zhí)行完上面的命令就安裝好了Node環(huán)境,為我們下一步測(cè)試做好了準(zhǔn)備。

測(cè)試驗(yàn)證

我們使用Node來(lái)寫一段最簡(jiǎn)單的程序來(lái)驗(yàn)證一下,程序如下:

var http = require('http');

http.createServer(function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('Hello World I am from A server\n');
}).listen(3000);

// 終端打印如下信息
console.log('Server running at http://127.0.0.1:3000/');
var http = require('http');

http.createServer(function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('Hello World I am from B server\n');
}).listen(4000);

// 終端打印如下信息
console.log('Server running at http://127.0.0.1:4000/');

然后我們先使用下面的命令啟動(dòng)nginx監(jiān)聽80端口

sudo service nginx start

然后我們?cè)偈褂肗ode啟動(dòng)我們上面的那段測(cè)試代碼

node servera.js

然后訪問(wèn)http://a.codekong.cn就可以看到瀏覽器輸出響應(yīng)了。然后測(cè)試一下另一個(gè)子域名也是可以正常響應(yīng)的。
到這里,我們就已經(jīng)成功使用nginx實(shí)現(xiàn)了單主機(jī)多域名映射了。

遇到的問(wèn)題

整個(gè)的探索過(guò)程中也遇到了一下問(wèn)題,這里記錄一下。

  • nginx啟動(dòng)失敗,報(bào)下面的錯(cuò)誤信息
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

這個(gè)最可能的原因是80端口被其他程序占用了,可以使用下面的命令查看占用80端口的程序的名稱和PID

sudo lsof -i:80

然后輸出下面的信息

COMMAND   PID     USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
apache2 18472     root    3u  IPv4 12682582      0t0  TCP *:http (LISTEN)
apache2 18475 www-data    3u  IPv4 12682582      0t0  TCP *:http (LISTEN)
apache2 18476 www-data    3u  IPv4 12682582      0t0  TCP *:http (LISTEN)

可以看出我這里是apache占用了80端口,所以可以使用命令吧apache停止了即可,也可以使用下面的命令直接把進(jìn)程殺死

sudo kill -9 [進(jìn)程PID]
  • nginx報(bào)啟動(dòng)失敗
    這次端口沒被占用,報(bào)錯(cuò)依然是下面的信息
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

看不出原因就按錯(cuò)誤提示使用下面的命令查看詳細(xì)的報(bào)錯(cuò)信息

sudo systemctl status nginx.service

輸出信息如下:

nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Wed 2018-09-12 01:07:34 CST; 16s ago
  Process: 18137 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
  Process: 18616 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=1/FAILURE)
  Process: 22450 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=1/FAILURE)
 Main PID: 22563 (code=exited, status=0/SUCCESS)

Sep 12 01:07:34 VM-163-140-ubuntu systemd[1]: Starting A high performance web server and a reverse proxy server...
Sep 12 01:07:34 VM-163-140-ubuntu nginx[22450]: nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by protocol)
Sep 12 01:07:34 VM-163-140-ubuntu nginx[22450]: nginx: configuration file /etc/nginx/nginx.conf test failed
Sep 12 01:07:34 VM-163-140-ubuntu systemd[1]: nginx.service: Control process exited, code=exited status=1
Sep 12 01:07:34 VM-163-140-ubuntu systemd[1]: Failed to start A high performance web server and a reverse proxy server.
Sep 12 01:07:34 VM-163-140-ubuntu systemd[1]: nginx.service: Unit entered failed state.
Sep 12 01:07:34 VM-163-140-ubuntu systemd[1]: nginx.service: Failed with result 'exit-code'.

然后在錯(cuò)誤信息里面看到了下面這句

nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by protocol)

第一反應(yīng)是IPV6的問(wèn)題,想起來(lái)因?yàn)樯洗卧谠品?wù)器上安裝docker,IPV6存在問(wèn)題,直接把云服務(wù)器的IPV6禁用了,而nginx是默認(rèn)同時(shí)支持IPV4和IPV6協(xié)議的,所以我禁用了IPV6就會(huì)報(bào)錯(cuò),所以處理辦法是禁用掉nginx的IPV6。

但是nginx的IPV6配置在哪里修改呢,看一下我們最開始展示的/etc/nginx/nginx.conf這個(gè)配置文件中的下面這樣

include /etc/nginx/sites-enabled/*;

我們?cè)谶@個(gè)目錄下發(fā)現(xiàn)了一個(gè)叫default的鏈接文件,它的鏈接信息可以通過(guò)ls -al查看,信息如下:

default -> /etc/nginx/sites-available/default

然后我們打開這個(gè)文件,看到里面的內(nèi)容是這樣的

server {
    listen 80 default_server;
    listen [::]:80 default_server;
}

其中第二行就是對(duì)IPV6的支持,直接注釋了,重新啟動(dòng)nginx即可。

總結(jié)

到此這篇關(guān)于nginx實(shí)現(xiàn)單主機(jī)多域名映射的項(xiàng)目實(shí)踐的文章就介紹到這了,更多相關(guān)nginx 單主機(jī)多域名映射內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 云服務(wù)器使用寶塔搭建Python環(huán)境,運(yùn)行django程序

    云服務(wù)器使用寶塔搭建Python環(huán)境,運(yùn)行django程序

    本文詳細(xì)講解了在云服務(wù)器使用寶塔搭建Python環(huán)境,運(yùn)行django程序的方法。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • Nginx源碼安裝的方法步驟

    Nginx源碼安裝的方法步驟

    這篇文章主要介紹了Nginx源碼安裝的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • 使用Nginx為自己的網(wǎng)站資源加上防盜鏈保護(hù)實(shí)現(xiàn)

    使用Nginx為自己的網(wǎng)站資源加上防盜鏈保護(hù)實(shí)現(xiàn)

    這篇文章主要為大家介紹了使用Nginx為自己的網(wǎng)站資源加上防盜鏈保護(hù)實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Nginx日志中request_time和upstream_response_time區(qū)別

    Nginx日志中request_time和upstream_response_time區(qū)別

    Nginx日志中的request_time和upstream_response_time是關(guān)鍵的性能指標(biāo),本文就來(lái)介紹一下Nginx日志中request_time和upstream_response_time區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-11-11
  • nginx中的proxy_redirect的使用案例詳解

    nginx中的proxy_redirect的使用案例詳解

    proxy_redirect 該指令用來(lái)修改被代理服務(wù)器返回的響應(yīng)頭中的Location頭域和“refresh”頭域,這篇文章主要介紹了nginx中的proxy_redirect的使用案例詳解,需要的朋友可以參考下
    2024-06-06
  • 使用Nginx實(shí)現(xiàn)301跳轉(zhuǎn)至https的根域名示例代碼

    使用Nginx實(shí)現(xiàn)301跳轉(zhuǎn)至https的根域名示例代碼

    這篇文章主要介紹了使用Nginx實(shí)現(xiàn)301跳轉(zhuǎn)至https的根域名,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • upstream模塊中常用options選項(xiàng)講解

    upstream模塊中常用options選項(xiàng)講解

    這篇文章主要為大家介紹了upstream模塊中常用options選項(xiàng)講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 詳解Nginx 虛擬主機(jī)配置的三種方式(基于端口)

    詳解Nginx 虛擬主機(jī)配置的三種方式(基于端口)

    Nginx配置虛擬主機(jī)支持3種方式主要有基于IP的虛擬主機(jī)配置,基于端口的虛擬主機(jī)配置,基于域名的虛擬主機(jī)配置。本篇文章主要介紹了基于端口的實(shí)現(xiàn),感興趣的小伙伴們可以參考一下
    2018-10-10
  • 服務(wù)器使用Nginx部署Springboot項(xiàng)目的詳細(xì)教程(jar包)

    服務(wù)器使用Nginx部署Springboot項(xiàng)目的詳細(xì)教程(jar包)

    這篇文章主要介紹了服務(wù)器使用Nginx部署Springboot項(xiàng)目的詳細(xì)教程(jar包),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Nginx配置終極版指南(全網(wǎng)最詳細(xì))

    Nginx配置終極版指南(全網(wǎng)最詳細(xì))

    對(duì)于前端項(xiàng)目來(lái)說(shuō),nginx是必須了解和熟悉的,本文對(duì)nginx整體的概念進(jìn)行了重新梳理,同時(shí)幫讀者理清nginx配置思路,文中通過(guò)代碼示例和圖文講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-11-11

最新評(píng)論