第一次使用nginx是2007年,當時主流還是apache。nginx橫空出世,在web2.0的推動下,迅速崛起。眼下已是絕對的主流了。
當時,還有一個輕量級的lighttpd,是德國人寫,剛開始還並駕齊驅。
但nginx之后發展更加迅猛,現在知道和使用lighttpd已經越來越少。
想了解更多三者的信息,請查看apache\nginx\lighttpd的對比分析
廢話說了這么多,進入正題吧。
一、安裝nginx
- ubuntu1804當前apt源是1.14版本的,查看方法
sudo apt-cahce show nginx
- nginx官網當下最新的文檔版本是1.16了,所以我們需要為apt添加最新的安裝源。
- 第一步,准備相關依賴包
sudo apt install curl gnupg2 ca-certificates lsb-release
- 第二步,在apt的安裝源中(倉庫)添加nginx的最新的穩定版(stable)的安裝包
echo "deb [arch=amd64] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
- 第三步,添加nginx的安裝源的簽名密鑰,通過apt的安全認證
sudo curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add - #會返回[ok]
- 第四步,確認簽名密鑰
sudo apt-key fingerprint ABF5BD827BD9BF62 #如果返回以下信息,說明安裝正確
pub rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62
uid [ unknown] nginx signing key <signing-key@nginx.com>
- 第五步,執行安裝命令
sudo apt update
sudo apt install nginx
- apt update 更新提示錯誤,N: Skipping acquire of configured file 'nginx/binary-i386/Packages' as repository 'http://nginx.org/packages/ubuntu bionic InRelease' doesn't support architecture 'i386'
- 解決辦法:vim /etc/apt/sources.list.d/nginx.list, 修改為:deb [arch=amd64] http://nginx.org/packages/ubuntu/ bionic nginx 增加 [arch=amd64]
- apt 指定安裝版本
- apt-cache madison nginx 查詢出版本
- apt insatll nginx=Version 安裝指定版本的nginx
二、啟動nginx和nginx常用命令
- 啟動/關閉/重啟
sudo /etc/init.d/nginx start/down/restart
- nginx優勢:支持熱部署,即可以不中斷服務的同時,修改服務器配置信息
nginx -t #檢查配置信息是否正確,如果返回seccuessfully,就可以執行,reload的。不管你有多自信,都請先走這一步,養成好習慣。
nginx -s reload #服務器配置信息,熱部署
- nginx常用命令
nginx -s quit 優雅停止nginx,有連接時會等連接請求完成再殺死worker進程
nginx -s reload 優雅重啟,並重新載入配置文件nginx.conf
nginx -s reopen 重新打開日志文件,一般用於切割日志
nginx -v 查看版本
nginx -t 檢查nginx的配置文件
nginx -h 查看幫助信息
nginx -V 詳細版本信息,包括編譯參數
nginx -c filename 指定配置文件
三、nginx的配置
- 配置文件位置.
- 主配置文件/etc/nginx/nginx.conf
- 應用配置文件夾, /etc/nginx/conf.d/ 此文件夾下.conf文件都會被載入
- 查看default.conf文件
cat /etc/nginx/conf.d/default.conf
server_name localhost #可以修改成你要綁定的域名
#location root 目錄是 /usr/share/nginx/html/
- 新建一個自己的靜態網站配置
cd /etc/nginx/conf.d/
sudo cp default.conf mysite.conf
vim mysite.conf
#修改,server_name 為 www.mysite.com (換成你的自己的域名,域名的A記錄已經指向這台服務器)
#修改,location 配置里的 root 為/data/www/mysite
#保存退出
sudo nginx -t #檢查我們新建的配置文件是否正確
sudo nginx -s reload #重新加載配置文件
- 解決403的錯誤。
- 這個時候,直接訪問www.mysite.com,容易出現是403錯誤,訪問被禁止 forbidden
- 兩個原因,一個是沒有index.html文件(好解決,vim index.html到目錄下),
- 一個是目錄沒有訪問權限。我們可以設置/data/www/mysite的權限為755
- nginx安裝后,會默認增加nginx的用戶和組,ch
sudo chmod 755 /data
sudo chmod 755 /data/www
sudo chmod 755 /data/www/mystie
#為什么要從/data開始,因為nginx的網站目錄的權限,要求父目錄及以上都擁有同樣的權限,需要讀和執行的權限
cat /etc/passwd #查看所有用戶
cat /etc/group #查看所有組
chown -R nginx /data/www/mysite
chgrp -R nginx /data/www/mysite
- 配置https
- 前提需要您有你自己域名的ssl認證。個人可以申請一個免費的,網上有資源,自己百度以下
- 將證書文件傳到服務器,使用的是scp命令將證書拷貝到服務器的/etc/nginx/ssl_certs/目錄下面。現在該目錄下有兩個文件,xxx.pem 和 xxx.key。
- 在創建配置文件/etc/nginx/conf.d/目錄下創建 myhttps.conf
server {
listen 443 ssl;
server_name www.mysite.com;
ssl_certificate /etc/nginx/ssl_certs/xxx.pem;
ssl_certificate_key /etc/nginx/ssl_certs/xxx.key;
#ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /data/www/mysite;
index index.html index.htm;
}
}
server {
listen 80;
server_name wwww.mysite.com; # 你的域名
# 強制跳轉https
rewrite ^(.*) https://$server_name$1 permanent;
}
# 保存退出
sudo nginx -t
sudo nginx -s reload