欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

背景

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

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

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

解決方案

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

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

具體實施

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

演示環(huán)境

云服務器使用的是Ubuntu16.04

安裝nginx服務器

使用下面的命令安裝nginx。

sudo apt install nginx

配置nginx服務器

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

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

說明nginx的默認配置文件中包含加載了這兩個目錄下的配置文件,所以我們可以在/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ā)到服務器的哪個端口進行處理,這里是3000這個端口。

proxy_pass http://127.0.0.1:3000/;

同樣的,我們再配置一下將b.codekong.cn的請求轉(zhuǎn)發(fā)到服務器內(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兩個子域名的解析到我自己的云服務器,入下圖所示:
這里寫圖片描述
我這里解析配置完后緩存會在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)境,為我們下一步測試做好了準備。

測試驗證

我們使用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就可以看到瀏覽器輸出響應了。然后測試一下另一個子域名也是可以正常響應的。
到這里,我們就已經(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.

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

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)

第一反應是IPV6的問題,想起來因為上次在云服務器上安裝docker,IPV6存在問題,直接把云服務器的IPV6禁用了,而nginx是默認同時支持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)文章

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

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

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

    Nginx源碼安裝的方法步驟

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

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

    這篇文章主要為大家介紹了使用Nginx為自己的網(wǎng)站資源加上防盜鏈保護實現(xià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)鍵的性能指標,本文就來介紹一下Nginx日志中request_time和upstream_response_time區(qū)別,具有一定的參考價值,感興趣的可以了解一下
    2024-11-11
  • nginx中的proxy_redirect的使用案例詳解

    nginx中的proxy_redirect的使用案例詳解

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

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

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

    upstream模塊中常用options選項講解

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

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

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

    服務器使用Nginx部署Springboot項目的詳細教程(jar包)

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

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

    對于前端項目來說,nginx是必須了解和熟悉的,本文對nginx整體的概念進行了重新梳理,同時幫讀者理清nginx配置思路,文中通過代碼示例和圖文講解的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2024-11-11

最新評論