Nginx服務(wù)器部署詳細(xì)代碼實例
Nginx 服務(wù)器
Nginx是一個高性能、高并發(fā)、輕量級的開源 Web 服務(wù)器軟件;
Nginx 高性能和高并發(fā)的核心就在于其事件驅(qū)動和異步非阻塞I/O模型;Nginx 通信可分為4個階段:
- 主進(jìn)程啟動:啟動 Nginx 時,首先運(yùn)行的是主進(jìn)程;主要負(fù)責(zé)讀取并驗證配置文件,創(chuàng)建和管理子進(jìn)程,綁定端口等;主進(jìn)程本身不處理客戶端連接或請求;
- 創(chuàng)建工作進(jìn)程:主進(jìn)程會創(chuàng)建一或多個工作進(jìn)程,工作進(jìn)程的數(shù)量通常會根據(jù) CPU 核心數(shù)自動設(shè)置;工作進(jìn)程是真正處理客戶端連接和請求的實體;所有工作進(jìn)程獨立且平等,都運(yùn)行在單線程中;工作進(jìn)程的核心是使用一個事件驅(qū)動循環(huán);
- 事件驅(qū)動循環(huán):每個工作進(jìn)程內(nèi)部都有一個持續(xù)的循環(huán),稱為事件循環(huán);該模型允許一個單線程的工作進(jìn)程同時管理數(shù)萬個并發(fā)連接;
- 連接處理:當(dāng)Nginx監(jiān)聽的端口出現(xiàn)新TCP請求時,主進(jìn)程本身監(jiān)聽了這些端口,但它不會處理連接;內(nèi)核會將這個新建立的連接交給其中一個工作進(jìn)程,該工作進(jìn)程開始在這個連接上處理 HTTP 請求/響應(yīng)或其他協(xié)議;
Nginx 使用共享內(nèi)存區(qū)域來實現(xiàn)工作進(jìn)程間的數(shù)據(jù)共享,主進(jìn)程負(fù)責(zé)創(chuàng)建這些共享內(nèi)存區(qū)域;
[root@server ~]# yum -y install nginx | tail -n 1 Complete! [root@server ~]# systemctl enable nginx --now Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service. [root@server ~]# firewall-cmd --add-service=http --permanent success [root@server ~]# firewall-cmd --reload success
在瀏覽器地址欄輸入Nginx服務(wù)器的IP地址或域名,如http://10.1.8.10;瀏覽器會發(fā)送HTTP請求到Nginx,Nginx處理請求并返回HTML內(nèi)容;
默認(rèn)返回/usr/share/nginx/html/index.html
使用該方法連接Nginx需配置監(jiān)聽80端口(HTTP)或443端口(HTTPS);
Nginx的主配置文件為/etc/nginx/nginx.conf;/etc/nginx/目錄下包含了所有nginx的配置文件;
/etc/nginx/nginx.conf包含全局配置域、網(wǎng)絡(luò)連接配置域和HTTP配置域;其中HTTP配置域內(nèi)的server塊是虛擬主機(jī)配置;
# 全局配置域
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# 網(wǎng)絡(luò)連接配置域
events {
worker_connections 1024;
}
# HTTP配置域
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 /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# 虛擬主機(jī)配置
server {
listen 80;
listen [::]:80;
server_name www.gc.cloud;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
# 測試配置文件
[root@server ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
server塊中主要參數(shù)作用如下:
- listen 80;:監(jiān)聽80端口;下方的 listen [::]:80; 是監(jiān)聽IPv6端口;
- server_name:域名;
- root:網(wǎng)站根目錄;
- index:默認(rèn)首頁文件;
- location:location塊;決定了如何處理不同的客戶端請求路徑;
# location塊語法
location [匹配模式] [匹配路徑] {
[配置指令]
}
location包含5種路徑匹配模式:
- location = /path:精確匹配;
- location ^~ /path:前綴匹配(優(yōu)先于正則);
- location ~ .php$:正則匹配(區(qū)分大小寫);
- location ~* .(jpg|png)$:正則匹配(不區(qū)分大小寫);
- location /:通用匹配;
| location塊內(nèi)常用指令 | 作用 |
|---|---|
| root | 設(shè)置文件根目錄 |
| alias | 路徑別名 |
| try_files | 嘗試多個文件路徑 |
| proxy_pass | 反向代理到后端 |
| index | 設(shè)置默認(rèn)索引文件 |
| rewrite | URL 重寫 |
| add_header | 添加 HTTP 響應(yīng)頭 |
| deny / allow | 訪問控制 |
SSL/TLS 配置
SSL/TLS是加密通信的安全協(xié)議,在客戶端和服務(wù)器之間建立加密通道;證書是服務(wù)器的數(shù)字身份證;
Nginx是SSL/TLS的執(zhí)行者;
證書生成流程如下:
[root@server ~]# openssl genrsa -out www.key 2048 Generating RSA private key, 2048 bit long modulus ....+++ ....+++ e is 65537 (0x10001) [root@server ~]# openssl req -new -key www.key -out www.csr -subj "/C=CN/ST=JS/L=NJ/O=LM/OU=DEVOPS/CN=www.gc.cloud/emailAddress=gc@gc.cloud" [root@server ~]# openssl x509 -req -days 3650 -in www.csr -signkey www.key -out www.crt Signature ok subject=/C=CN/ST=JS/L=NJ/O=LM/OU=DEVOPS/CN=www.gc.cloud/emailAddress=gc@gc.cloud Getting Private key
openssl genrsa -out www.key 2048生成一個2048位的RSA私鑰文件(www.key),用于SSL/TLS加密通信的基礎(chǔ)密鑰;
openssl req -new -key www.key -out www.csr -subj "/C=CN/ST=JS/L=NJ/O=LM/OU=DEVOPS/CN=www.gc.cloud/emailAddress=gc@gc.cloud"用于創(chuàng)建證書簽名請求文件(www.csr);subj參數(shù)定義了證書主體信息,其中CN參數(shù)必須與域名一致;
openssl x509 -req -days 3650 -in www.csr -signkey www.key -out www.crt使用私鑰(www.key)對CSR簽名,生成有效期為3650天的自簽名證書;
站點配置文件一般需要獨立創(chuàng)建,以便于管理;一般位于/etc/nginx/sites-available/目錄下;
首先配置證書相關(guān)參數(shù):
- ssl_certificate:證書路徑;
- ssl_certificate_key:私鑰路徑;
之后還需在站點配置文件中配置啟用HTTP重定向到HTTPS:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name www.gc.cloud;
root /usr/share/nginx/html;
ssl_certificate /www.crt;
ssl_certificate_key /www.key;
}
server {
listen 80;
server_name www.gc.cloud;
root /usr/share/nginx/html;
return 301 https://$host$request_uri; # 重定向到HTTPS
}
443是HTTPS的默認(rèn)端口,專門用于加密數(shù)據(jù)傳輸,而80端口用于明文HTTP;
ssl參數(shù)用于啟用SSL/TLS加密模塊,使Nginx能處理加密請求;若省略ssl,即使監(jiān)聽443端口,Nginx也不會啟用加密;
配置完成后重啟服務(wù)即可;
動態(tài)腳本
Nginx本身只能處理靜態(tài)資源(HTML/CSS/圖片),而PHP能給Nginx帶來動態(tài)內(nèi)容處理能力;
PHP是為Web而生的服務(wù)器端腳本語言;通過與Nginx進(jìn)行協(xié)同工作,能讓靜態(tài)網(wǎng)站變成可交互的智能應(yīng)用;
# 安裝php與其擴(kuò)展包 [root@server ~]# yum install -y php php-fpm | tail -n 1 Complete! [root@server ~]# yum install -y php-gd php-common php-pear php-mbstring php-mcrypt | tail -n 1 Complete!
之后在站點配置文件中配置支持php;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
- fastcgi_pass:指定PHP-FPM監(jiān)聽的地址和端口;上述寫法適用于同一服務(wù)器環(huán)境,也可使用fastcgi_pass 127.0.0.1:9000; 配置支持跨服務(wù)器部署,但需保證在
php-fpm.conf配置PHP-FPM監(jiān)聽該端口; - try_files:按順序檢查文件/目錄;當(dāng)訪問的文件不存在時返回配置的文件地址,通常和fastcgi_index協(xié)同工作;
- fastcgi_index:指定默認(rèn)的PHP入口文件;優(yōu)先級低于try_files;
- fastcgi_param SCRIPT_FILENAME:指定PHP腳本的完整路徑;$document_root為網(wǎng)站根目錄,$fastcgi_script_name為請求的PHP文件路徑;
- include fastcgi_params:包含預(yù)定義的FastCGI參數(shù);
配置完成后就可以使用了;
反向代理
反向代理用于隱藏真實服務(wù)器;它接收用戶請求,再轉(zhuǎn)交給后端真實服務(wù)器,使用戶不直接和真實服務(wù)器進(jìn)行交互;
Nginx可以在站點配置文件中配置實現(xiàn)反向代理;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
通過語法檢查并重啟服務(wù)后就可以使用了;
總結(jié)
到此這篇關(guān)于Nginx服務(wù)器部署的文章就介紹到這了,更多相關(guān)Nginx服務(wù)器部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決Nginx + PHP(FastCGI)遇到的502 Bad Gateway錯誤
昨日,有朋友問我,他將Web服務(wù)器換成Nginx 0.6.31 + PHP 4.4.7(FastCGI)后,有時候訪問會出現(xiàn)“502 Bad Gateway”錯誤,如何解決。2009-10-10
網(wǎng)頁502?Bad?Gateway?nginx/1.20.1報錯的原因與解決方法
502 bad gateway nginx/1.20.1 是一個錯誤提示,通常出現(xiàn)在訪問網(wǎng)站時出現(xiàn)問題,這篇文章主要給大家介紹了關(guān)于網(wǎng)頁502?Bad?Gateway?nginx/1.20.1報錯的原因與解決方法,需要的朋友可以參考下2024-03-03
nginx-ingress-controller日志持久化方案的解決
這篇文章主要介紹了nginx-ingress-controller日志持久化方案的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03

