Nginx简介
Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,同时也提供了 IMAP/POP3/SMTP 服务,可以不间断运行,提供热更新功能。占用内存少、并发能力强,最重要的是,Nginx 是免费的并可以商业化,配置使用都比较简单。
Nginx 特点
高并发、高性能
模块化架构使得它的扩展性非常好
异步非阻塞的事件驱动模型这点和 Node.js 相似
无需重启可不间断运行
热部署、平滑升级
完全开源,生态好
Nginx使用场景
静态资源服务
反向代理服务,包括缓存、负载均衡等
API 服务,OpenResty
Nginx部署
Linux服务器部署docker:https://blog.flycloud.club/2023/07/05/dockerinstall-001
Docker 一键部署Nginx
先决条件安装好docker
复制以下代码运行启动 Nginx
docker run -d \
--name nginx \
--restart always \
-p 80:80 \
-p 443:443 \
-v /data/docker/nginx/conf.d:/etc/nginx/conf.d \
-v /data/docker/nginx/vhost.d:/etc/nginx/vhost.d \
-v /data/docker/usr/share/nginx/html:/usr/share/nginx/html \
-v /data/docker/nginx/certs:/etc/nginx/certs:ro \
nginx
Nginx配置
静态配置文件编辑
proxy_set_header Host $host; # 将客户端请求中的
Host
头部信息设置到后端服务器请求中的Host
头部中,以便后端服务器能够根据请求的域名来处理请求。如果不设置这个头部信息,后端服务器可能会无法正确地处理请求。proxy_set_header X-Real-IP $remote_addr; # 将客户端请求中的真实 IP 地址设置到后端服务器请求的头部信息中的
X-Real-IP
字段中,以便后端服务器能够获取客户端的真实 IP 地址。这个指令在一些情况下很有用,例如后端服务器需要根据客户端的 IP 地址来做一些限制或者记录日志等操作。proxy_pass http://backend_server; # Nginx 会根据配置的
proxy_pass
指令将请求转发到指定的后端服务器。我这里填写的是服务器公网地址IP加端口,我在应用容器里配置了外网可访问的IP。配置IP后可以强制重定向到https
http重定向https
server {
listen 80;
server_name localhost;
#重定向HTTPS
#return 301 https://$host$request_uri;
#服务器配置
location / {
#proxy_pass http://backend_server;
#项目目录
root /lanys/demo/demo;
#index.html存放位置
index index.html index.htm;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
配置SSL后配置文件编辑
我在服务器里面起了2个不同的应用服务器配置了不同的端口号,我可以根据不同的端口来转发不同的域名。
需要在后面注释的内容,如果你是指定index.html路径就不要注释。
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
#例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
#root html;
#index index.html index.htm;
需要在后面增加的内容一
正常web页面下请添加配置一即可。
可以使用内网IP+端口的方式转发
也可以使用指定index.html路径的方式。
# 我使用的是公网IP+端口的方式
location / {
proxy_pass http://本服务器公网IP:应用服务器端口号;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
#例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
#root html;
#index index.html index.htm;
}
}
需要在后面增加的内容二
这个配置是应用是存储服务器配置信息不需要请忽略。
替换
location
里面的内容即可,请注意大括号{}
。
此配置字段含义
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
:将客户端 IP 地址添加到请求头中的X-Forwarded-For
字段,以便后端服务器能够获取客户端的真实 IP 地址。proxy_set_header X-Forwarded-Proto $scheme;
:将客户端请求的协议添加到请求头中的X-Forwarded-Proto
字段,以便后端服务器能够获取客户端请求的协议。proxy_set_header Range $http_range;
:将客户端请求的Range
头部信息添加到后端服务器的请求头中的Range
字段中,以便后端服务器能够支持客户端的断点续传请求。proxy_set_header If-Range $http_if_range;
:将客户端请求的If-Range
头部信息添加到后端服务器的请求头中的If-Range
字段中,以便后端服务器能够支持客户端的断点续传请求。proxy_redirect off;
:禁止 Nginx 在反向代理时修改响应头中的Location
和Refresh
字段。proxy_pass http://localhost:8081;
:将请求转发到指定的后端服务器。proxy_set_header Host $host;
:将客户端请求中的Host
头部信息设置到后端服务器请求中的Host
头部中。proxy_set_header X-Real-IP $remote_addr;
:将客户端请求中的真实 IP 地址设置到后端服务器请求的头部信息中的X-Real-IP
字段中。client_max_body_size 20000m;
:设置客户端请求上传文件的大小上限为 20000 MB。
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_redirect off;
proxy_pass http://localhost:端口号;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# the max size of file to upload
client_max_body_size 20000m;
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
#例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
#root html;
#index index.html index.htm;
}
}
完整Nginx配置
只适用于SSL证书配置(如果了解网站搭建请自行修改)。
单
域名
单证书
请删除一个(请看注释#第二个服务
)server
(包含443
以下所有内容。
如果你配置了SSL 证书请把以下内容中80端口中的
location
服务器地址信息注释掉,使用SSL
里面面的location
配置。location /certs/ { deny all; }
的含义是,当请求的 URI 匹配/certs/
时,将返回 403 Forbidden 错误,拒绝用户访问/certs/
目录下的所有资源。其中,deny all
是 Nginx 中的指令,表示拒绝所有的请求。
server {
listen 80;
server_name localhost;
#重定向HTTPS
#return 301 https://$host$request_uri;
#服务器配置
location / {
#proxy_pass http://backend_server;
#项目目录
#root /lanys/demo/demo;
#index.html存放位置
# index index.html index.htm;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# 第一个服务
server {
#SSL 默认访问端口号为 443
listen 443 ssl;
#请填写绑定证书的域名
server_name cloud.tencent.com;
#请填写证书文件的相对路径或绝对路径
ssl_certificate cloud.tencent.com_bundle.crt;
#请填写私钥文件的相对路径或绝对路径
ssl_certificate_key cloud.tencent.com.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://公网IP:第一个应用服务器的端口号;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
#例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
#root html;
#index index.html index.htm;
}
location /certs/ {
deny all;
}
}
# 第二个服务
server {
#SSL 默认访问端口号为 443
listen 443 ssl;
#请填写绑定证书的域名
server_name cloud.tencent.com;
#请填写证书文件的相对路径或绝对路径
ssl_certificate cloud.tencent.com_bundle.crt;
#请填写私钥文件的相对路径或绝对路径
ssl_certificate_key cloud.tencent.com.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://公网IP:第二个应用服务器的端口号;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
#例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
root html;
index index.html index.htm;
}
location /certs/ {
deny all;
}
}