Nginx是一個非同步框架的Web伺服器,也可以用作反向代理,負載平衡器 和 HTTP快取。該軟體由Igor Sysoev 建立,並於2004年首次公開發布。 同名公司成立於2011年,以提供支援。 Nginx是一款免費的開源軟體,根據類BSD許可證的條款釋出。維基百科
雖說 Nginx 一般都是由後端來配置的,但是如果你想成為一個全棧或者一個有追求的前端的話,瞭解一下 Nginx 還是很有必要的。如果沒有伺服器的話,自己可以裝一個 Linux 虛擬機器練下手。這裡我用的 CentOS7 64位的系統來做演示。
虛擬機器安裝
這篇文章主要是介紹 Nginx 的,關於 Mac 安裝 CentOS 虛擬機器的教程可以參考這篇文章 Mac Pro 上用 Vmware Fusion 7.1.1 安裝 CentOS7,其他系統就自行查詢了。安裝好之後可以輸入 ping baidu.com
測試一下網路是不是正常的。
SSH 登入虛擬機器
虛擬機器安裝好了之後我一般會用 terminal 連線虛擬機器,因為想貼上一些長命令時不是很好操作。使用命令 ssh rootName@ip
,如下圖所示
獲取虛擬機器的 IP 地址,可以在 VMware 的視窗輸入 ifconfig
,如果提示 ifconfig command not found
,可以參考這篇文章CentOS 7 下 ifconfig command not found 解決辦法
安裝 Nginx
Nginx 安裝也十分簡單,輸入 yum install -y nginx
,如果無法安裝,則先執行這條命令 rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
安裝 Nginx 源。然後再輸入 yum install -y nginx
。安裝好之後可以輸入 whereis nginx
檢視 Nginx 的預設目錄。輸入 nginx
啟動服務,然後在瀏覽器輸入虛擬機器的 IP 地址進行訪問,如果無法訪問的話,應該就是虛擬機器的防火牆沒有開啟80埠,輸入 firewall-cmd --permanent --add-port=80/tcp
開啟防火牆的80埠,再輸入 firewall-cmd --reload
。到這裡再訪問一下虛擬機器的 IP 地址,就可以看到 Nginx 的歡迎頁面了。參考文章在CentOS 7中,使用yum安裝Nginx。
修改配置檔案
輸入 cd /etc/nginx
進入 /etc/nginx 目錄,用 ls
命令可以看到 nginx.conf 這個檔案。這個就是 nginx 的配置檔案了。用 cat nginx.conf
命令來看下里面寫了什麼東西。內容大致如下
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
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;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
複製程式碼
主要配置內容還是在之後一句 include /etc/nginx/conf.d/*.conf;
接下來在進入 /etc/nginx/conf.d/ 目錄看下有什麼東西。同樣用 ls
命令可以看到一個 default.conf 檔案,內容大致如下
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
複製程式碼
可以看到這個服務在監聽 80 埠,root 指向專案根目錄,即我們訪問 localhost (預設為80埠)時,將會查詢 /usr/share/nginx/html 這個目錄下的檔案。我自己的配置一般如下
server {
listen 80;
server_name domain; #使用域名或 IP 地址
charset utf8; #字元編碼
access_log /path/folder/access.log main; #訪問日誌
error_log /path/folder/error.log error; #錯誤日誌
root /path/folder;
index index.html;
}
複製程式碼
日誌檔案需要我們到對應目錄下建立對應的 log 檔案,修改完配置檔案可以使用 nginx -s reload
重啟服務。