鍍金池/ 問答/Linux  網(wǎng)絡(luò)安全/ 訪問通過CNAME映射的二級域名,nginx返回歡迎頁?

訪問通過CNAME映射的二級域名,nginx返回歡迎頁?

情況是這樣的,如aaa.com表示主站,bbb.aaa.com是一個子站點,現(xiàn)在我在騰訊云上通過CNAME把ccc.com映射到了bbb.aaa.com,然而訪問ccc.com卻沒有跳轉(zhuǎn)到bbb.aaa.com。后臺用了nginx做代理,具體配置如下

server {
    listen 8081;
    server_name *.aaa.com;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        if ($host = 'aaa.com') {
            proxy_pass http://127.0.0.1:8000;
        }

        if ($host = 'www.aaa.com') {
            proxy_pass http://127.0.0.1:8000;
        }

        if ($host ~ ^(\b(?!www\b)\w+).aaa.com$) {
            proxy_pass http://127.0.0.1:8080;
        }
    }
}

訪問ccc.com返回的是nginx的歡迎頁,第一次搞nginx不太了解
圖片描述

回答
編輯回答
雨蝶
  1. 把ccc.com CNAME到bbb.aaa.com,Host就應該是bbb.aaa.com才對,所以只要給bbb.aaa.com留一條適配規(guī)則就行了
  2. 建議把aaa.com CNAME到www.aaa.com,這樣可以少寫個通用適配的判斷邏輯(不然還得判斷aaa.com就是默認指向www.aaa.com的會很煩,不如交給域名解析搞)
  3. Nginx配置里,盡量避免用if指令,這是官方也認可的最佳實踐。當然如果你要寫Lua腳本啥的另說~
  4. 看你題目里listen給的是8081端口不知道什么意思,一般網(wǎng)頁默認是在80端口上
  5. 下邊第二條是看你原配置寫的,其實我個人更喜歡精準命中(即直接寫“bbb.aaa.com”而不是用通配符)

下邊寫了套,你試下(個別沒跑過不知道效果):

events {
    use epoll;
}

http {
    # 公有部分提?。ㄏ蛳录墧U展)
    proxy_set_header Host $host;
    proxy_set_header X-Real-Ip $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
    server {
        listen 80;
        server_name www.aaa.com;
        proxy_pass http://127.0.0.1:8000; # 轉(zhuǎn)發(fā)模式
    }
    server {
        listen 80;
        server_name *.aaa.com; # 如果前一條不能命中(二級前綴不是www),則本條做通用適配
        proxy_pass http://127.0.0.1:8080;
    }
}

參考:
專題 | Jerry Qu的小站
nginx之proxy_pass指令完全拆解

2017年11月15日 20:42
編輯回答
朕略萌

1.我按照你給的寫法重新改了配置,現(xiàn)在訪問ccc.com直接跳轉(zhuǎn)到了aaa.com,但是直接訪問bbb.aaa.com是可以成功訪問到的,CNAME解析之后難道是通過ip去訪問嗎,因為我的aaa.com站點和bbb.aaa.com站點在同一個服務器上。

  1. 8081端口主要是目前測試用的
  2. 用通配符原因是,需要解析二級域名是不固定的,數(shù)量會增加。
2017年6月9日 22:31