編碼的世界 / 優質文選 / 文明

Nginx的安裝與配置(PHP)


2022年7月19日
-   

寫在前面
在學習搭建LNMP環境的過程中初識Nginx(讀法:engine x),感覺完全複制粘貼網上的安裝配置方法沒有什麼意義,就打算展開學習一下。
關於Windows下Nginx的安裝和配置:Windows下的Nginx安裝與配置(PHP) 工作環境
  • 騰訊雲 1核 1GB 1Mbps 雲服務器
  • CentOS 7.2 64位
  • 已經安裝了PHP
  • 使用putty鏈接服務器

書面信息
Nginx:俄羅斯工程師Igor Sysoev開發,高性能的HTTP/反向代理/郵件服務器。
安裝
CentOS下安裝:
#使用yum安裝,-y表示對所有的提問都回答“yes”,install為安裝指令
yum -y install nginx


配置
Nginx的配置文件默認位置為:/etc/nginx/nginx.conf
如果說找不到可以搜索一下:
#locate 搜索文件的位置
locate nginx.conf


如上圖,在我的環境中nginx.conf在/etc/nginx/nginx.conf
使用vim打開文件nginx.conf
vim /etc/nginx/nginx.conf

配置文件分析
nginx.conf內容如下(只截取了沒被注掉的部分):


# nginx運行的用戶名
user nginx;
# nginx啟動進程,通常設置成和cpu的數量相等,這裏為自動
worker_processes auto;
# errorlog文件位置
error_log /var/log/nginx/error.log;
# pid文件地址,記錄了nginx的pid,方便進程管理
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
# 用來加載其他動態模塊的配置
include /usr/share/nginx/modules/*.conf;
# 工作模式和連接數上限
events {
# 每個worker_processes的最大並發鏈接數
# 並發總數:worker_processes*worker_connections
worker_connections 1024;
}
# 與提供http服務相關的一些配置參數類似的還有mail
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記錄訪問的用戶、頁面、瀏覽器、ip和其他的訪問信息
access_log /var/log/nginx/access.log main;
# 這部分下面會單獨解釋
# 設置nginx是否使用sendfile函數輸出文件
sendfile on;
# 數據包最大時發包(使用Nagle算法)
tcp_nopush on;
# 立刻發送數據包(禁用Nagle算法)
tcp_nodelay on;
# 鏈接超時時間
keepalive_timeout 65;
# 這個我也不清楚
types_hash_max_size 2048;
# 引入文件擴展名與文件類型映射表
include /etc/nginx/mime.types;
# 默認文件類型
default_type application/octet-stream;
# 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;
# http服務上支持若乾虛擬主機。
# 每個虛擬主機一個對應的server配置項
# 配置項裏面包含該虛擬主機相關的配置。
server {
# 端口
listen 80 default_server;
listen [::]:80 default_server;
# 訪問的域名
server_name _;
# 默認網站根目錄(www目錄)
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
# 默認請求
location / {
}
# 錯誤頁(404)
error_page 404 /404.html;
location = /40x.html {
}
# 錯誤頁(50X)
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}

值得說明的幾點
  • 關於error_log 可以設置log的類型(記錄什麼級別的信息)有:debug、info、notice、warn、error、crit幾種
  • 關於sendfile 一般的網絡傳輸過程 硬盤 >> kernel buffer >> user buffer>> kernel socket buffer >>協議棧 使用sendfile後 硬盤 >> kernel buffer (快速拷貝到kernelsocket buffer) >>協議棧 可以顯著提高傳輸性能。
  • tcp_nopush和tcp_nodelay tcp_nopush只有在啟用了sendfile時才起作用, 在啟用tcp_nopush後,程序接收到了數據包後不會馬上發出,而是等待數據包最大時一次性發出,可以緩解網絡擁堵。(Nagle化) 相反tcp_nodelay則是立即發出數據包.

  • 配置
    分析完了配置文件後開始配置環境。
    因為只是配置PHP的服務器,而且只使用一個端口所以只需要改動server部分
    在vim中點擊‘i’進入編輯模式。

    server {
    listen 80 default_server;
    listen [::]:80 default_server;
    # 這裏改動了,也可以寫你的域名
    server_name localhost;
    root /usr/share/nginx/html;
    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;
    location / {
    # 這裏改動了 定義首頁索引文件的名稱
    index index.php index.html index.htm;
    }
    error_page 404 /404.html;
    location = /40x.html {
    }
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    }
    # 這裏新加的
    # PHP 腳本請求全部轉發到 FastCGI處理. 使用FastCGI協議默認配置.
    # Fastcgi服務器和程序(PHP,Python)溝通的協議.
    location ~ .php$ {
    # 設置監聽端口
    fastcgi_pass 127.0.0.1:9000;
    # 設置nginx的默認首頁文件(上面已經設置過了,可以刪除)
    fastcgi_index index.php;
    # 設置腳本文件請求的路徑
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    # 引入fastcgi的配置文件
    include fastcgi_params;
    }
    }

    修改完成後將vim編輯器切換到一般一半模式(Esc),然後輸入:wq保存退出。
    之後重啟Nginx服務
    service nginx restart

    以上就配置成功了,但是上面的配置只是nginx配置部分,更多的內容需要繼續學習。
    測試
    我們可以通過下面的方法判斷Nginx配置是否成功。
  • 在Nginx的網站根目錄(/usr/share/nginx/html)下創建一個php文件,隨便起名我的是phpinfo.php
    內容如下:
    <?php
    // 順便可以看一下php的擴展全不全
    phpinfo();
  • 進入你的網站看看能不能打開文件 你的ip/文件名 例如:localhost/phpinfo.php


  • 我的成功了~~

    熱門文章