最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

最近遇到的一個小問題,記錄了一下解決過程,寫出來分享給大家。

背景

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

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

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

解決方案

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

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

具體實施

下面來實戰(zhàn)演示整個過程。

演示環(huán)境

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

安裝nginx服務(wù)器

使用下面的命令安裝nginx。

sudo apt install nginx

配置nginx服務(wù)器

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

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

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

所以我們在/etc/nginx/conf.d/這個目錄下使用vi創(chuàng)建a.confb.conf來分別表示我們需要解析映射的兩個子域名。然后在這兩個文件中分別寫入下面的內(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;
    }
}

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

server_name  a.codekong.cn;

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

proxy_pass http://127.0.0.1:3000/;

同樣的,我們再配置一下將b.codekong.cn的請求轉(zhuǎn)發(fā)到服務(wù)器內(nèi)部的4000這個端口,配置文件如下:

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兩個子域名的解析到我自己的云服務(wù)器,入下圖所示:
這里寫圖片描述
我這里解析配置完后緩存會在10分鐘后失效,也就是域名解析會在10分鐘后生效,大家依據(jù)自己的配置來定。

安裝NodeJS

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

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

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

測試驗證

我們使用Node來寫一段最簡單的程序來驗證一下,程序如下:

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/');

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

sudo service nginx start

然后我們再使用Node啟動我們上面的那段測試代碼

node servera.js

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

遇到的問題

整個的探索過程中也遇到了一下問題,這里記錄一下。

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

這個最可能的原因是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停止了即可,也可以使用下面的命令直接把進程殺死

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

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

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'.

然后在錯誤信息里面看到了下面這句

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

第一反應(yīng)是IPV6的問題,想起來因為上次在云服務(wù)器上安裝docker,IPV6存在問題,直接把云服務(wù)器的IPV6禁用了,而nginx是默認(rèn)同時支持IPV4和IPV6協(xié)議的,所以我禁用了IPV6就會報錯,所以處理辦法是禁用掉nginx的IPV6。

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

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

我們在這個目錄下發(fā)現(xiàn)了一個叫default的鏈接文件,它的鏈接信息可以通過ls -al查看,信息如下:

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

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

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

其中第二行就是對IPV6的支持,直接注釋了,重新啟動nginx即可。

總結(jié)

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

相關(guān)文章

  • Nginx的gzip指令使用小結(jié)

    Nginx的gzip指令使用小結(jié)

    GZIP就是將文件壓縮傳輸,圖片、視頻、大文件不建議使用壓縮,壓縮需要占用你的服務(wù)器資源,壓縮完效果也不大,今天通過本文給大家如何用好Nginx的gzip指令,感興趣的朋友一起看看吧
    2022-05-05
  • nginx配置之proxy_pass示例詳解

    nginx配置之proxy_pass示例詳解

    Nginx是最常用的反向代理工具之一,一個指令proxy_pass搞定反向代理,對于接口代理、負(fù)載均衡很是實用,但proxy_pass指令后面的參數(shù)很有講究,這篇文章主要介紹了nginx配置之proxy_pass的相關(guān)資料,需要的朋友可以參考下
    2025-11-11
  • 通過Nginx實現(xiàn)前端與后端的協(xié)同部署

    通過Nginx實現(xiàn)前端與后端的協(xié)同部署

    在現(xiàn)代 web 開發(fā)中,前端與后端的協(xié)同部署是一個關(guān)鍵問題,一個高效的部署策略不僅能提升用戶體驗,還能簡化開發(fā)流程,今天,我們就來探討如何利用 Nginx 實現(xiàn)前端與后端的協(xié)同部署,需要的朋友可以參考下
    2025-03-03
  • 解決502?Bad?Gateway錯誤的詳細(xì)指南與實例

    解決502?Bad?Gateway錯誤的詳細(xì)指南與實例

    這篇文章主要給大家介紹了關(guān)于解決502?Bad?Gateway錯誤的詳細(xì)指南與實例,502 Bad Gateway錯誤通常是由于網(wǎng)關(guān)或代理服務(wù)器在嘗試訪問上游服務(wù)器(通常是Web服務(wù)器)時未能及時接收到響應(yīng)導(dǎo)致的,文中將解決辦法介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • windows安裝nginx部署步驟圖解(反向代理與負(fù)載均衡)

    windows安裝nginx部署步驟圖解(反向代理與負(fù)載均衡)

    這篇文章主要介紹了windows安裝nginx部署步驟,設(shè)置反向代理與負(fù)載均衡的使用方法,需要的朋友可以參考下
    2014-02-02
  • nginx負(fù)載均衡下的webshell上傳的實現(xiàn)

    nginx負(fù)載均衡下的webshell上傳的實現(xiàn)

    本文主要介紹了nginx負(fù)載均衡下的webshell上傳的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Nginx?Rewrit實現(xiàn)網(wǎng)頁跳轉(zhuǎn)功能詳細(xì)步驟

    Nginx?Rewrit實現(xiàn)網(wǎng)頁跳轉(zhuǎn)功能詳細(xì)步驟

    Rewrite主要實現(xiàn)url地址重寫,以及重定向,就是把傳入web的請求重定向到其他url的過程,這篇文章主要介紹了Nginx?Rewrit實現(xiàn)網(wǎng)頁跳轉(zhuǎn)功能詳細(xì)步驟,需要的朋友可以參考下
    2024-02-02
  • Nginx搭建負(fù)載均衡集群的實現(xiàn)

    Nginx搭建負(fù)載均衡集群的實現(xiàn)

    這篇文章主要介紹了Nginx搭建負(fù)載均衡集群的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Nginx Gzip模塊啟用和配置指令詳解

    Nginx Gzip模塊啟用和配置指令詳解

    這篇文章主要介紹了Nginx Gzip模塊啟用和配置指令詳解的,需要的朋友可以參考下
    2014-04-04
  • Nginx安裝配置的實現(xiàn)示例

    Nginx安裝配置的實現(xiàn)示例

    本文主要介紹了Nginx安裝配置的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12

最新評論

仁布县| 东兰县| 南漳县| 北流市| 濮阳市| 搜索| 文登市| 定兴县| 始兴县| 东阳市| 陆川县| 新兴县| 梧州市| 汝南县| 江门市| 石狮市| 巴东县| 鄂州市| 长泰县| 句容市| 华安县| 南投县| 屯留县| 扎鲁特旗| 德安县| 余姚市| 桂平市| 额敏县| 大理市| 安丘市| 五常市| 博爱县| 海口市| 宜春市| 荔浦县| 福泉市| 含山县| 石泉县| 大丰市| 大新县| 宜昌市|