9月 21, 2020 Network Nginx
### Reverse proxy (反向代理服務器)

Reverse proxy 是指由代理伺服器接收了來自 internet 的訪問,然後會把訪問轉發給內聯網上的伺服器,然後把伺服器回傳的結果返回給 internet 的使用者。而這個代理伺服器的工作就是 reverse proxy 了。

### 為什麼要使用 reverse proxy

很多時我們的服務器是不會直接連上 internet 的,而是由一個 firewall 來分隔開 internet 和 intranet,以確保服務器的安全。所以我們需要一個 reverse proxy 來為各種不同服務的請求分流到不同的伺服器上。

### Nginx

Nginx 除是可以成為網站伺服器外,還可以作為一個 reverse proxy。只需要在 config 檔案內設定好就可以了。

設定檔位置 : `/etc/nginx/site-availables/default`

先來看一個最普通的設定:

```text
# 設定 1 個 server 設置
server {

	# 監聽 port 80
	listen 80 default_server;
	listen [::]:80 default_server;
	
	# 監聽 port 443 (使用 ssl 設定)
	listen 443 ssl default_server;
	listen [::]:443 ssl default_server;
	
	# 設定 ssl 使用的證書及密匙
	ssl_certificate /etc/nginx/ssl/nginx.crt;
	ssl_certificate_key /etc/nginx/ssl/nginx.key;
	
	# 設定監聽的 domain (可以多於 1 個)
	server_name _;
	
	# 設定文件的根目錄
	root /var/www/html/;

	# 設定預設要存取的文件
	index index.htm index.html index.php index.nginx-debian.html;
}
```

我們把上面的設定檔修改一下,刪除下面這兩個設定 :

```text
root /var/www/html/;

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

然後在原有的位置加入下面的設定 :

```text
# 指定收到 url 的工作
location / {
	
	# 加入額外的 http header
	proxy_set_header X-Forwarded-For $remote_addr;

	# 加入額外的 http header
	proxy_set_header Host $http_host;
	
	# 把訪問移交到目標伺服器
	proxy_pass https://localhost:8080;
}
```

下面是完整的設定檔 :

```text
# 設定 1 個 server 設置
server {

	# 監聽 port 80
	listen 80 default_server;
	listen [::]:80 default_server;
	
	# 監聽 port 443 (使用 ssl 設定)
	listen 443 ssl default_server;
	listen [::]:443 ssl default_server;
	
	# 設定 ssl 使用的證書及密匙
	ssl_certificate /etc/nginx/ssl/nginx.crt;
	ssl_certificate_key /etc/nginx/ssl/nginx.key;
	
	# 設定監聽的 domain (可以多於 1 個)
	server_name _;

	# 指定收到 url 的工作
	location / {
	
		# 加入額外的 http header
		proxy_set_header X-Forwarded-For $remote_addr;

		# 加入額外的 http header
		proxy_set_header Host $http_host;
	
		# 把訪問移交到目標伺服器
		proxy_pass https://localhost:8080;
	}
}
```

經過上面的設定,就可以把來自 port 80 的訪問轉發到同一主機的 port 8080 上去了。
過去文章
2025 (9)
4 (5)
3 (1)
2 (3)
2024 (25)
11 (3)
10 (3)
9 (1)
3 (18)
2022 (6)
10 (1)
6 (2)
5 (1)
3 (1)
1 (1)
2021 (21)
11 (7)
7 (1)
6 (2)
5 (2)
4 (6)
3 (2)
2 (1)
2020 (92)
12 (1)
11 (2)
10 (4)
9 (10)
8 (5)
7 (1)
6 (3)
5 (1)
4 (4)
3 (25)
2 (7)
1 (29)
2019 (57)
12 (25)
11 (7)
9 (25)