Nginx 配置

feiben發表於2018-04-11

Nginx 配置

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,如下圖所示

image.png

獲取虛擬機器的 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 重啟服務。