我備案了個域名,買了一個阿里雲伺服器,想要搭建幾個自己的網站,難免要接觸 nginx。
那麼我用 nginx 來幹嘛呢:
- 靜態資源反向代理
- 將域名泛解析到伺服器之後,通過 nginx 來給不同的二級域名分配伺服器上的程式。
1、安裝 nginx
1.1、centos7
yum install -y nginx
1.2、windows
到官網下載,安裝包,解壓即可使用:官網
1.3、centos7 中 nginx 常用命令
# 開機啟動
systemctl enable nginx.service
# 啟動
systemctl start nginx.service
# 使用某個配置檔案啟動(要先關閉 ngxin,不然會報錯的)
nginx -c /etc/nginx/nginx.conf
# 關閉(如果這樣關閉不了的話,就把 nginx 程式給殺掉)
nginx -s stop
# 檢視 nginx 的程式 id
ps -ef | grep nginx
# 殺死程式(比如殺死程式1234)
kill -9 1234
nginx 的預設配置檔案是:/etc/nginx/nginx.conf
這個配置檔案會自動讀取:/etc/nginx/conf.d/
資料夾下的所有 .conf
檔案。
假如你寫了個網站,需要用到 nginx ,那麼你就把配置檔案丟到 /etc/nginx/conf.d/
資料夾下,然後重啟 nginx 就行了:
nginx -s stop
nginx -c /etc/nginx/nginx.conf
2、nginx 配置(反向代理設定 & 二級域名)
2.1 配置檔案
假設我們有兩個網站:www.example.com
blog.example.com
它們分別有兩個 ngxin 配置檔案放在:/home/www.example.com/www.example.com.nginx.conf
/home/blog.example.com/blog.example.com.nginx.conf
伺服器對外開放 80 埠,兩個網站對應的程式埠分別為:
www.example.com 程式 8000
www.example.com 靜態資源 8080
blog.example.com 程式 8001
blog.example.com 靜態資源 8081
那麼他們的配置內容分別為:
# /home/www.example.com/www.example.com.nginx.conf
server {
# 伺服器對外只監聽 80 埠
listen 80;
# 當 80 埠監聽到了來自 www.example.com 的請求
server_name www.example.com;
# 那麼把這個請求轉到 http://localhost:8080
location / {
proxy_pass http://localhost:8080;
}
}
server {
# 監聽到 8080 埠有人發起請求(其實就是上面轉過來的↑,使用者不能直接訪問 8080 埠的)
listen 8080;
# 只允許本機訪問
server_name localhost;
# 程式根目錄
root /home/www.example.com;
# 預設的網頁檔案
index index.html index.htm;
# 匹配所有 uri (如果 url 為:http://www.example.com/hehe,那麼 uri 為:/hehe)
location / {
# 我們的程式實際上是在 8000 埠上
proxy_pass http://localhost:8000$request_uri;
# 下面這一大堆,欲知詳情自己查
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
# 匹配首頁
location = / {
proxy_pass http://localhost:8000;
}
# 匹配 /**.** 結尾的 uri,並且不是 /**.html、/**.htm
location ~* ^.+/[^/]+(?=.)([^/](?!(html|htm)))+$ {
# 匹配到的都定位到靜態資源目錄裡
root /home/www.example.com/static;
etag on;
expires max;
}
}
# /home/blog.example.com/blog.example.com.nginx.conf
server {
# 伺服器對外只監聽 80 埠
listen 80;
# 當 80 埠監聽到了來自 blog.example.com 的請求
server_name blog.example.com;
# 那麼把這個請求轉到 http://localhost:8081
location / {
proxy_pass http://localhost:8081;
}
}
server {
# 監聽到 8081 埠有人發起請求(其實就是上面轉過來的↑,使用者不能直接訪問 8081 埠的)
listen 8081;
# 只允許本機訪問
server_name localhost;
# 程式根目錄
root /home/blog.example.com;
# 預設的網頁檔案
index index.html index.htm;
# 匹配所有 uri (如果 url 為:http://blog.example.com/hehe,那麼 uri 為:/hehe)
location / {
# 我們的程式實際上是在 8001 埠上
proxy_pass http://localhost:8001$request_uri;
# 下面這一大堆,欲知詳情自己查
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
# 匹配首頁
location = / {
proxy_pass http://localhost:8001;
}
# 匹配 /**.** 結尾的 uri,並且不是 /**.html、/**.htm
location ~* ^.+/[^/]+(?=.)([^/](?!(html|htm)))+$ {
# 匹配到的都定位到靜態資源目錄裡
root /home/blog.example.com/static;
etag on;
expires max;
}
}
注意看兩個配置的區別。
2.2 建立軟連結
假如我們每個網站程式放在一個資料夾裡,該程式的 nginx 配置檔案也應該放在這個資料夾裡才方便管理。但前面提到,我們需要把配置檔案丟到 /etc/nginx/conf.d/
資料夾下,怎樣才能使這個配置檔案既在程式資料夾下,又在 /etc/nginx/conf.d/
資料夾下呢?
假如我們在程式資料夾下有一個 ngxin 配置檔案:/home/www.example.com/www.example.com.nginx.conf
我們需要給這個檔案建立一個軟連結到 /etc/nginx/conf.d/
下:
ln -s /home/example/example.nginx.conf /etc/nginx/conf.d/www.example.com.nginx.conf
這樣操作之後,當我們改程式資料夾下的配置檔案,/etc/nginx/conf.d/
下與之對應的配置檔案也會被修改,修改後重啟 nginx 就能夠使新的 ngxin 配置生效了。