Nginx反向代理設置

前言

因為最近覺得好像要寫一下resume,於是就開始接觸了從來沒寫過的前端網頁(也花了不少時間),然後也是第一次使用以前沒用過的nginx實作反向代理,中途遇到了不少問題花了兩天才把所有的問題排除,我動了兩天的感想如這張圖:

其中遇到最主要的問題是沒有頭緒要怎麼從不同的subdomain轉到不同的port,還有nginx如何指到apache服務(我以前的wordpress網站),其實我當然也可以用github的部署網頁就好,但我覺得這樣就太無趣了。於是就開始了我與nginx的纏鬥。

Troubleshooting

1. Nginx port 沒有出現在netstat上

以前用apache開發的時候只有照別人的tutorial但不是很懂其中的道理,現在稍稍懂了一些。
我原本是只有這段程式碼(etc/nginx/site-enabled/default)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server {
listen 80;
listen [::]:80;

root /var/www/owen_CV;

index index.html index.htm index.nginx-debian.html;

server_name cv.owenowenisme.com;

location / {
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
try_files $uri $uri/ =404;
}

原本以為proxypass到8080port就可以了,但只寫這樣沒有用,用netstst -nlpt也沒有出現8080port,後來才發現是這串指令只是把從cv.owenowenisme.com進來的client導向8080port而已。不會幫你自己開8080port,因此要自己另外開。
因此要再加上以開啟8080port。:

1
2
3
4
5
server{
listen 8080;
root /var/www/owen_CV;
server_name cv.owenowenisme.com;
}

2. Nginx 轉至 Apache 服務

原本在 80 port 的apache服務改到了5000 port,apache中的port.conf要加上:

1
Listen 127.0.0.1:5000

site-enable中的conf檔則要加上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<VirtualHost *:5000>
#ServerName owenspace.owenowenisme.com

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
<Directory /var/www/html>
Options FollowSymLinks
AllowOverride Limit Options FileInfo
DirectoryIndex index.php
Require all granted
</Directory>
<Directory /var/www/html/wp-content>
Options FollowSymLinks
Require all granted
</Directory>
</VirtualHost>

其中servername 很重要不能加!因為我們已經要把80轉到5000的工作交給nginx了,因此若在apache 也加上servername會找不到(因為轉進來時已經不是原本的域名了)。

3.限定只能從域名訪問,禁止使用ip連線

安全性的問題?很多網站都會這樣做。
其實實作非常簡單,在site-enabled中的conf檔中加上:

1
2
3
4
5
server {
listen 80 default_server;
server_name _;
return 403;
}

他的原理就是當接收到空域名時(也就是以ip登入)就會回傳狀態碼403(403 Forbidden),以達到目的。

Result

🔗CV
🔗Wordpress

現在這兩個網站是假在同一個server的不同port,也只能從域名訪問,讚讚讚😼