nginx 服务器
nginx是一个高性能、高并发、轻量级的开源 web 服务器软件;
nginx 高性能和高并发的核心就在于其事件驱动和异步非阻塞i/o模型;nginx 通信可分为4个阶段:
- 主进程启动:启动 nginx 时,首先运行的是主进程;主要负责读取并验证配置文件,创建和管理子进程,绑定端口等;主进程本身不处理客户端连接或请求;
- 创建工作进程:主进程会创建一或多个工作进程,工作进程的数量通常会根据 cpu 核心数自动设置;工作进程是真正处理客户端连接和请求的实体;所有工作进程独立且平等,都运行在单线程中;工作进程的核心是使用一个事件驱动循环;
- 事件驱动循环:每个工作进程内部都有一个持续的循环,称为事件循环;该模型允许一个单线程的工作进程同时管理数万个并发连接;
- 连接处理:当nginx监听的端口出现新tcp请求时,主进程本身监听了这些端口,但它不会处理连接;内核会将这个新建立的连接交给其中一个工作进程,该工作进程开始在这个连接上处理 http 请求/响应或其他协议;
nginx 使用共享内存区域来实现工作进程间的数据共享,主进程负责创建这些共享内存区域;
[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服务器的ip地址或域名,如http://10.1.8.10;浏览器会发送http请求到nginx,nginx处理请求并返回html内容;
默认返回/usr/share/nginx/html/index.html
使用该方法连接nginx需配置监听80端口(http)或443端口(https);
nginx的主配置文件为/etc/nginx/nginx.conf;/etc/nginx/目录下包含了所有nginx的配置文件;
/etc/nginx/nginx.conf包含全局配置域、网络连接配置域和http配置域;其中http配置域内的server块是虚拟主机配置;
# 全局配置域
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# 网络连接配置域
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;
# 虚拟主机配置
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块中主要参数作用如下:
- listen 80;:监听80端口;下方的 listen [::]:80; 是监听ipv6端口;
- server_name:域名;
- root:网站根目录;
- index:默认首页文件;
- location:location块;决定了如何处理不同的客户端请求路径;
# location块语法
location [匹配模式] [匹配路径] {
[配置指令]
}
location包含5种路径匹配模式:
- location = /path:精确匹配;
- location ^~ /path:前缀匹配(优先于正则);
- location ~ .php$:正则匹配(区分大小写);
- location ~* .(jpg|png)$:正则匹配(不区分大小写);
- location /:通用匹配;
| location块内常用指令 | 作用 |
|---|---|
| root | 设置文件根目录 |
| alias | 路径别名 |
| try_files | 尝试多个文件路径 |
| proxy_pass | 反向代理到后端 |
| index | 设置默认索引文件 |
| rewrite | url 重写 |
| add_header | 添加 http 响应头 |
| deny / allow | 访问控制 |
ssl/tls 配置
ssl/tls是加密通信的安全协议,在客户端和服务器之间建立加密通道;证书是服务器的数字身份证;
nginx是ssl/tls的执行者;
证书生成流程如下:
[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加密通信的基础密钥;
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"用于创建证书签名请求文件(www.csr);subj参数定义了证书主体信息,其中cn参数必须与域名一致;
openssl x509 -req -days 3650 -in www.csr -signkey www.key -out www.crt使用私钥(www.key)对csr签名,生成有效期为3650天的自签名证书;
站点配置文件一般需要独立创建,以便于管理;一般位于/etc/nginx/sites-available/目录下;
首先配置证书相关参数:
- 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的默认端口,专门用于加密数据传输,而80端口用于明文http;
ssl参数用于启用ssl/tls加密模块,使nginx能处理加密请求;若省略ssl,即使监听443端口,nginx也不会启用加密;
配置完成后重启服务即可;
动态脚本
nginx本身只能处理静态资源(html/css/图片),而php能给nginx带来动态内容处理能力;
php是为web而生的服务器端脚本语言;通过与nginx进行协同工作,能让静态网站变成可交互的智能应用;
# 安装php与其扩展包 [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监听的地址和端口;上述写法适用于同一服务器环境,也可使用fastcgi_pass 127.0.0.1:9000; 配置支持跨服务器部署,但需保证在
php-fpm.conf配置php-fpm监听该端口; - try_files:按顺序检查文件/目录;当访问的文件不存在时返回配置的文件地址,通常和fastcgi_index协同工作;
- fastcgi_index:指定默认的php入口文件;优先级低于try_files;
- fastcgi_param script_filename:指定php脚本的完整路径;$document_root为网站根目录,$fastcgi_script_name为请求的php文件路径;
- include fastcgi_params:包含预定义的fastcgi参数;
配置完成后就可以使用了;
反向代理
反向代理用于隐藏真实服务器;它接收用户请求,再转交给后端真实服务器,使用户不直接和真实服务器进行交互;
nginx可以在站点配置文件中配置实现反向代理;
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;
}
通过语法检查并重启服务后就可以使用了;
总结
到此这篇关于nginx服务器部署的文章就介绍到这了,更多相关nginx服务器部署内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论