Nginx服務(wù)器部署詳細(xì)代碼實(shí)例
Nginx 服務(wù)器
Nginx是一個(gè)高性能、高并發(fā)、輕量級(jí)的開源 Web 服務(wù)器軟件;
Nginx 高性能和高并發(fā)的核心就在于其事件驅(qū)動(dòng)和異步非阻塞I/O模型;Nginx 通信可分為4個(gè)階段:
- 主進(jìn)程啟動(dòng):啟動(dòng) Nginx 時(shí),首先運(yùn)行的是主進(jìn)程;主要負(fù)責(zé)讀取并驗(yàn)證配置文件,創(chuàng)建和管理子進(jìn)程,綁定端口等;主進(jìn)程本身不處理客戶端連接或請(qǐng)求;
- 創(chuàng)建工作進(jìn)程:主進(jìn)程會(huì)創(chuàng)建一或多個(gè)工作進(jìn)程,工作進(jìn)程的數(shù)量通常會(huì)根據(jù) CPU 核心數(shù)自動(dòng)設(shè)置;工作進(jìn)程是真正處理客戶端連接和請(qǐng)求的實(shí)體;所有工作進(jìn)程獨(dú)立且平等,都運(yùn)行在單線程中;工作進(jìn)程的核心是使用一個(gè)事件驅(qū)動(dòng)循環(huán);
- 事件驅(qū)動(dòng)循環(huán):每個(gè)工作進(jìn)程內(nèi)部都有一個(gè)持續(xù)的循環(huán),稱為事件循環(huán);該模型允許一個(gè)單線程的工作進(jìn)程同時(shí)管理數(shù)萬個(gè)并發(fā)連接;
- 連接處理:當(dāng)Nginx監(jiān)聽的端口出現(xiàn)新TCP請(qǐng)求時(shí),主進(jìn)程本身監(jiān)聽了這些端口,但它不會(huì)處理連接;內(nèi)核會(huì)將這個(gè)新建立的連接交給其中一個(gè)工作進(jìn)程,該工作進(jìn)程開始在這個(gè)連接上處理 HTTP 請(qǐng)求/響應(yīng)或其他協(xié)議;
Nginx 使用共享內(nèi)存區(qū)域來實(shí)現(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;瀏覽器會(huì)發(fā)送HTTP請(qǐng)求到Nginx,Nginx處理請(qǐng)求并返回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塊;決定了如何處理不同的客戶端請(qǐng)求路徑;
# 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 | 嘗試多個(gè)文件路徑 |
| 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生成一個(gè)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)建證書簽名請(qǐng)求文件(www.csr);subj參數(shù)定義了證書主體信息,其中CN參數(shù)必須與域名一致;
openssl x509 -req -days 3650 -in www.csr -signkey www.key -out www.crt使用私鑰(www.key)對(duì)CSR簽名,生成有效期為3650天的自簽名證書;
站點(diǎn)配置文件一般需要獨(dú)立創(chuàng)建,以便于管理;一般位于/etc/nginx/sites-available/目錄下;
首先配置證書相關(guān)參數(shù):
- ssl_certificate:證書路徑;
- ssl_certificate_key:私鑰路徑;
之后還需在站點(diǎn)配置文件中配置啟用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能處理加密請(qǐng)求;若省略ssl,即使監(jiān)聽443端口,Nginx也不會(huì)啟用加密;
配置完成后重啟服務(wù)即可;
動(dòng)態(tài)腳本
Nginx本身只能處理靜態(tài)資源(HTML/CSS/圖片),而PHP能給Nginx帶來動(dòng)態(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!
之后在站點(diǎn)配置文件中配置支持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)訪問的文件不存在時(shí)返回配置的文件地址,通常和fastcgi_index協(xié)同工作;
- fastcgi_index:指定默認(rèn)的PHP入口文件;優(yōu)先級(jí)低于try_files;
- fastcgi_param SCRIPT_FILENAME:指定PHP腳本的完整路徑;$document_root為網(wǎng)站根目錄,$fastcgi_script_name為請(qǐng)求的PHP文件路徑;
- include fastcgi_params:包含預(yù)定義的FastCGI參數(shù);
配置完成后就可以使用了;
反向代理
反向代理用于隱藏真實(shí)服務(wù)器;它接收用戶請(qǐng)求,再轉(zhuǎn)交給后端真實(shí)服務(wù)器,使用戶不直接和真實(shí)服務(wù)器進(jìn)行交互;
Nginx可以在站點(diǎn)配置文件中配置實(shí)現(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
lua+nginx實(shí)現(xiàn)黑名單禁止訪問的示例代碼
本文介紹如何使用Nginx與Lua腳本通過OpenResty平臺(tái)實(shí)現(xiàn)高效的IP黑名單功能,利用Redis存儲(chǔ)黑名單,定時(shí)更新共享內(nèi)存字典,防止惡意IP訪問,感興趣的可以了解一下2025-11-11
Nginx動(dòng)態(tài)IP黑名單的實(shí)現(xiàn)步驟
為了封禁某些爬蟲或者惡意用戶對(duì)服務(wù)器的請(qǐng)求,我們需要建立一個(gè)動(dòng)態(tài)的?IP?黑名單,本文主要介紹了Nginx動(dòng)態(tài)IP黑名單的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2025-02-02
NGINX 配置內(nèi)網(wǎng)訪問的實(shí)現(xiàn)步驟
本文主要介紹了NGINX 配置內(nèi)網(wǎng)訪問的實(shí)現(xiàn)步驟,Nginx的geo模塊限制域名訪問權(quán)限,僅允許內(nèi)網(wǎng)/辦公室IP訪問,具有一定的參考價(jià)值,感興趣的可以了解一下2025-05-05
深度剖析Nginx限速模塊的3個(gè)核心陷阱與5種正確實(shí)踐
這篇文章主要為大家詳細(xì)介紹了Nginx中限速模塊的3個(gè)核心陷阱與5種正確實(shí)踐,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-11-11
記一次nginx配置不當(dāng)引發(fā)的499與failover 機(jī)制失效問題
近期在非高峰期也存在499超過告警閾值的偶發(fā)情況,多的時(shí)候一天幾次,少的時(shí)候則幾天一次,持續(xù)一般也就數(shù)分鐘,經(jīng)過和小伙伴的共同探究,最后發(fā)現(xiàn)之前對(duì)于499是客戶端主動(dòng)斷開因而和服務(wù)端關(guān)系不大的想當(dāng)然認(rèn)知是錯(cuò)誤的,這里記錄一下2023-05-05

