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

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è)小問題,記錄了一下解決過程,寫出來分享給大家。

背景

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

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

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

解決方案

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

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

具體實(shí)施

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

演示環(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/*;
}

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

所以我們在/etc/nginx/conf.d/這個(gè)目錄下使用vi創(chuàng)建a.confb.conf來分別表示我們需要解析映射的兩個(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;

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

proxy_pass http://127.0.0.1:3000/;

同樣的,我們再配置一下將b.codekong.cn的請求轉(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ù)自己的配置來定。

安裝NodeJS

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

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

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

測試驗(yàn)證

我們使用Node來寫一段最簡單的程序來驗(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

然后我們再使用Node啟動(dòng)我們上面的那段測試代碼

node servera.js

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

遇到的問題

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

  • 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的問題,想起來因?yàn)樯洗卧谠品?wù)器上安裝docker,IPV6存在問題,直接把云服務(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/*;

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

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

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

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

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

總結(jié)

到此這篇關(guān)于nginx實(shí)現(xiàn)單主機(jī)多域名映射的項(xiàng)目實(shí)踐的文章就介紹到這了,更多相關(guān)nginx 單主機(jī)多域名映射內(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是最常用的反向代理工具之一,一個(gè)指令proxy_pass搞定反向代理,對于接口代理、負(fù)載均衡很是實(shí)用,但proxy_pass指令后面的參數(shù)很有講究,這篇文章主要介紹了nginx配置之proxy_pass的相關(guān)資料,需要的朋友可以參考下
    2025-11-11
  • 通過Nginx實(shí)現(xiàn)前端與后端的協(xié)同部署

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論

泊头市| 库尔勒市| 五家渠市| 灵石县| 芷江| 砚山县| 梅州市| 南和县| 会东县| 确山县| 叶城县| 永新县| 谢通门县| 广丰县| 贡嘎县| 浮山县| 许昌县| 新竹市| 四子王旗| 威信县| 裕民县| 砀山县| 永州市| 大荔县| 抚宁县| 丽水市| 涟源市| 龙海市| 金乡县| 合江县| 黄龙县| 五华县| 勃利县| 茶陵县| 南溪县| 武隆县| 都匀市| 永善县| 金湖县| 土默特左旗| 泰兴市|