Nginx是目前最流行的網(wǎng)站服務(wù)器軟件,可以說是服務(wù)端必備工具烫罩。相比傳統(tǒng)的Apache服務(wù)器軟件樱调,Nginx更輕量化约素,性能更好。
以下教程按照阿里云centOS7服務(wù)器為參考笆凌。
為yum添加庫
sudo yum install epel-release
使用yum安裝
sudo yum install nginx
啟動Nginx
sudo systemctl start nginx
然后通過IP地址或域名可以訪問站點圣猎,默認(rèn)是打開CentOS介紹頁。
修改網(wǎng)站文件目錄
打開/etc/nginx/nginx.conf
文件乞而,http{}
中server{}
里的這句說明了默認(rèn)的網(wǎng)站文件目錄位置送悔。
root /usr/share/nginx/html;
我們可以直接修改到實際放置網(wǎng)站文件的目錄。比如
root /10knet/web;
修改后需要重新啟動Nginx使其生效。
重新啟動
nginx -s reload
重啟后通過IP地址或域名可以訪問站點欠啤,檢查是否成功荚藻。
新增配置文件
nginx.conf是Nginx的最基本設(shè)置文件,它也規(guī)定了還要自動載入哪些別的配置文件洁段,默認(rèn)情況會自動載入下面兩個目錄下所有的.conf
文件应狱,第二個include在http{}
里面。
include /usr/share/nginx/modules/*.conf;
include /etc/nginx/conf.d/*.conf;
如果你的網(wǎng)站文件夾很固定祠丝,比如一直是/10knet/
這個文件疾呻,那么就可以把把它也添加到http{}
中來:
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
include /10knet/*.conf;
然后就可以在網(wǎng)站文件夾下創(chuàng)建一個myNginx.conf文件,把整個server{}
內(nèi)容剪切写半、粘貼過去岸蜗,保存好之后重啟使配置生效。
這樣做的好處是以后可以直接在項目目錄內(nèi)修改Nginx配置叠蝇,而不需要每次都打開Nginx目錄璃岳。缺點是配置被分散開來,要注意不能互相沖突蟆肆。
下面是nginx.conf的內(nèi)容:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
include /10knet/*.conf;
}
注意其中error_page
兩段矾睦,這是自動處理找不到頁面或服務(wù)器出錯的,遇到這種情況服務(wù)器就會從這里設(shè)定的目錄讀取40x.html返回給用戶炎功,就是最常見的404錯誤枚冗。如果ai.10knet.com/333
找不到文件,就會自動返回10knet/pub/ai/err/40x.html
文件蛇损。
代理轉(zhuǎn)發(fā)
除了靜態(tài)網(wǎng)頁文件服務(wù)赁温,我們還要接收和反應(yīng)用戶接口的請求服務(wù),比如用戶請求/login
的時候服務(wù)器要進行用戶密碼驗證淤齐。
因為我們的接口處理程序都是運行在服務(wù)器某個端口上的股囊,所以我們只要讓Nginx把這些接口請求轉(zhuǎn)發(fā)到這個端口就可以了。
配置代碼如下:
location ^~ /api/ {
proxy_pass http://127.0.0.1:3100/api/;
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_set_header Via "nginx";
}
這是把所有/api/...
接口都轉(zhuǎn)發(fā)到http://127.0.0.1:3100/api/
更啄。所以我們必須編寫和運行一個服務(wù)器程序運行在3100端口上稚疹,比如用Java、Nogdejs或者Golang編寫都可以祭务,實際上也非常簡單内狗。
重點提示!務(wù)必設(shè)置阿里云服務(wù)器的端口開放權(quán)限义锥,禁止3100端口對外開放柳沙,不能讓用戶直接訪問這個端口,否則很容易造成安全風(fēng)險拌倍。
子域名配置
子域名就是類似http://app.10knet.com
或者http://ai.10knet.com
這樣的域名赂鲤≡刖叮可以讓我們把網(wǎng)站的不同模塊內(nèi)容清楚地劃分開。
可以在阿里云DNS云解析設(shè)置中為網(wǎng)站配置特定的子域名数初,但那要指定不同的服務(wù)器找爱,而且要手工為每個子域名進行配置。
能不能在一個服務(wù)器上自動配置所有子域名泡孩?這就是Nginx的泛域名解析模式缴允。方法是采樣動態(tài)的server_name,比如myNginx.conf中下面這個寫法:
server_name ~^(?<subdomain>.+).10knet.com$;
root /10knet/pub/$subdomain/;
index index.html index.htm;
這就可以接收任意的xxx.10knet.com
的域名地址珍德,并且自動匹配到/10knet/pub/xxx
文件夾下的index.html
頁面。
如下所示的是/10knet/myNginx.conf
文件內(nèi)容:
server {
#http主要泛域名服務(wù)器矗漾,靜態(tài)文件和接口
listen 80;
server_name ~^(?<subdomain>.+).10knet.com$;
root /10knet/pub/$subdomain/;
index index.html index.htm;
#接口代理到本地服務(wù)程序
location ^~ /api/ {
proxy_pass http://127.0.0.1:3100/api/;
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_set_header Via "nginx";
}
#出錯地址指向子域名內(nèi)error文件夾
error_page 404 /40x.html;
location = /40x.html {
root /10knet/pub/$subdomain/err ;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /10knet/pub/$subdomain/err;
}
}
重定向設(shè)置
上面設(shè)置了泛域名锈候,但丟失了主域名10knet.com
的解析,我們偷個懶敞贡,直接把它重定向到www.10knet.com
泵琳,增加一個新的server配置就可以,代碼如下:
server {
#重定向http://10knet.com到http://www.10knet.com
listen 80;
server_name 10knet.com;
return 301 http://www.10knet.com$request_uri;
}
設(shè)置為隨系統(tǒng)啟動
使用下面的命令讓Nginx自動開機啟動誊役,可以使用下面的命令获列。
sudo systemctl enable nginx
也可以直接修改/etc/rc.d/rc.local
命令,例如下面這樣:
# 啟動MongoDB
nohup mongod --dbpath=/var/lib/mongo --logpath=/var/log/mongodb/log.txt > /shell/mongod.log 2>&1 &
sleep 3s
sudo systemctl start nginx
sleep 3s
# 啟動其他程序
(
cd /opt/app
nohup ./app > kfission.log 2>&1 &
cd /
)
關(guān)于這個代碼請參考這個文章【編程】Golang服務(wù)端程序部署
歡迎關(guān)注我的專欄( つ??ω??)つ【人工智能通識】
每個人的智能新時代
如果您發(fā)現(xiàn)文章錯誤蛔垢,請不吝留言指正击孩;
如果您覺得有用,請點喜歡鹏漆;
如果您覺得很有用巩梢,歡迎轉(zhuǎn)載~