寫在前面
在學習搭建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
我的成功了~~