Nginx
# frps.board Nginx配置示例
server
{
listen 80;
server_name frps.com;
index index.html index.htm default.htm default.html;
root /www/wwwroot/frps-board;
# HTTP反向代理相关配置开始 >>>
location / {
proxy_pass http://127.0.0.1:65457;
proxy_set_header Host $Host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
proxy_set_header X-Host $host:$server_port;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 30s;
proxy_read_timeout 86400s;
proxy_send_timeout 30s;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# ERROR-PAGE-START 错误页相关配置,可以注释、删除或修改
# error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = 50x.html {
root html;
}
#日志配置
access_log /www/logs/frps-board.log;
error_log /www/logs/frps-board.error.log;
}
Nginx简介
高性能(响应快、高并发)HTTP和反向代理Web服务器,同时提供 IMAP/POP3/STMP 服务
代理
HTTP代理、反向代理,Web服务器最常用的功能之一,尤其是反向代理
正向代理
VPN
⭐反向代理
负载均衡
Nginx提供的负载均衡策略有两种:内置策略和扩展策略
内置策略:轮询,加权轮询,IP Hash
扩展策略:
内置策略
轮询
依次循环
http {
upstream backend { # 在server列表进行轮询
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
}
加权轮询
http {
upstream backend {
server 127.0.0.1:8080 weight=3; # 加权(权重比例)
server 127.0.0.1:8081 weight=1;
}
server {
listen 80;
server_name localhost;
location / {
root ./html;
index index.html index.htm;
proxy_pass http://backend; # 将请求反向代理到server列表进行加权轮询
}
}
access_log logs/access.log;
error_log logs/errorl.log;
}
IP Hash
IP Hash对客户端请求的IP进行Hash操作,然后根据Hash结果将同一个客户端IP的请求分发给同一台服务器进行处理
可以解决Session不共享的问题
Session
问题会话保存在
Tomcat
启动了N台服务器,就会有N个不同Session的Tomcat
IP Hash 通过对IP进行Hash操作,将某一个客户端的请求固定打到某一台服务器上
加
Redis
⭐
动静分离
将不需要后台处理的静态文件(如 html、css、js、jpg 等),与需要后台处理的动态资源区分开
让动态网站里的动态网页根据一定规则,把不变的资源和经常变动的资源区分开来,
动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,提高资源的响应速度。
没有后端鉴权,安全问题。
Nginx常用命令
Linux
默认Server端口 80
cd /usr/local/nginx/sbin # 切换到nginx安装目录
./nginx # 启动
#环境变量没问题可以直接 nginx 启动
nginx -s stop # 停止
nginx -s quit # 安全退出
nginx -s reload # 重新加载配置文件 ⭐
ps aux | grep nginx # 查看nginx进程
Nginx文件结构
/etc/nginx/nginx.conf
使用宝塔面板安装的目录在
/www/server/nginx/conf/nginx.conf
... # 全局配置块
events { # events配置块
...
}
http { # http配置块
... # http全局块
upstream xx { # 负载均衡配置块
}
server { # server配置块
... # server全局配置块
location [PATTERN] { # location配置块
...
}
location [PATTERN] {
...
}
}
server {
...
}
... #http全局块
}
1、全局块:配置影响nginx全局的指令
一般有运行nginx服务器的 用户 组,nginx 进程 pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等
2、events块:配置影响nginx服务器或与用户的网络连接
有每个进程的 最大连接数 ,选取哪种 事件 驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等
3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等
4、server块:配置虚拟主机的相关参数
一个http中可以有多个server
- 5、location块:配置请求的路由,以及各种页面的处理情况。
Nginx配置
样例释义:
########### 每个指令必须有分号结束。#################
# user administrator administrators;
#配置用户或者组,默认为nobody nobody。
# worker_processes 2;
#允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid; #指定nginx进程运行文件存放地址
error_log log/error.log debug;
#制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
accept_mutex on; # 设置网路连接序列化,防止惊群现象发生,默认为on
multi_accept on; # 设置一个进程是否同时接受多个网络连接,默认为off
#use epoll; # 事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; # 最大连接数,默认为512
}
http {
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #热备
}
include mime.types; # 文件扩展名与文件类型映射表
default_type application/octet-stream; # 默认文件类型,默认为text/plain
log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; # 自定义格式
#access_log off; # 取消服务日志
access_log log/access.log myFormat; #combined为日志格式的默认值
sendfile on; # 允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
sendfile_max_chunk 100k; # 每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
keepalive_timeout 65; # 连接超时时间,默认为75s,可以在http,server,location块。
error_page 404 /404.html; # 错误页
server {
keepalive_requests 120; # 单连接请求上限次数。
listen 80; # 监听端口
server_name localhost; # 监听地址
location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
#root path; #根目录
#index vv.txt; #设置默认页
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
}
}
}
几个常见配置项
$remote_addr
与$http_x_forwarded_for
用以记录客户端的IP地址;$remote_user
用来记录客户端用户名称;$time_local
用来记录访问时间与时区;$request
用来记录请求的URL与HTTP协议;$status
用来记录请求状态;成功是200;$body_bytes_sent
记录发送给客户端文件主体内容大小;$http_referer
用来记录从那个页面链接访问过来的;$http_user_agent
记录客户端浏览器的相关信息;- 惊群现象:一个网络连接到来,多个睡眠的进程被同时叫醒,但只有一个进程能获得链接。这样会影响系统性能。
- 每个指令必须有分号结束。
单站点配置(宝塔面板配置)
/etc/nginx/conf.d/mcIndex.conf
使用宝塔面板安装的目录在
/www/server/panel/vhost/nginx/*.conf
server
{
listen 80;
# listen 443 ssl http2;
# SSL
server_name mc.olimc.top;
index index.html index.htm default.htm default.html;
root /www/wwwroot/mcIndex;
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
#HTTP_TO_HTTPS_START
# if ($server_port !~ 443){
# rewrite ^(/.*)$ https://$host$1 permanent;
# }
#HTTP_TO_HTTPS_END
#SSL证书目录配置
# ssl_certificate /www/server/panel/vhost/cert/mcIndex/fullchain.pem;
# ssl_certificate_key /www/server/panel/vhost/cert/mcIndex/privkey.pem;
# ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
# ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
# ssl_prefer_server_ciphers on;
# ssl_session_cache shared:SSL:10m;
# ssl_session_timeout 10m;
# add_header Strict-Transport-Security "max-age=31536000";
# error_page 497 https://$host$request_uri;
#SSL-END
#ERROR-PAGE-START 错误页相关配置,可以注释、删除或修改
#error_page 404 /404.html;
#error_page 502 /502.html;
#ERROR-PAGE-END
#REWRITE-START 伪静态相关配置,URL重写规则引用,修改后将导致面板设置的伪静态规则失效
# include /www/server/panel/vhost/rewrite/mcIndex.conf;
#REWRITE-END
#禁止访问的文件或目录
# location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
# {
# return 404;
# }
# HTTP反向代理相关配置开始 >>>
# localtion /api
location / {
proxy_pass http://127.0.0.1:9001;
proxy_set_header Host $Host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
proxy_set_header X-Host $host:$server_port;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 30s;
proxy_read_timeout 86400s;
proxy_send_timeout 30s;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# location /preview {
# proxy_pass http://127.0.0.1:9002;
# }
# HTTP反向代理相关配置结束 <<<
#日志配置
access_log /www/wwwlogs/mcIndex.log;
error_log /www/wwwlogs/mcIndex.error.log;
}
配置示例(HTTP)
server
{
listen 80;
listen 443 ssl http2;
server_name mc.olimc.top;
index index.html index.htm default.htm default.html;
root /www/wwwroot/mcIndex;
# SSL证书目录配置
ssl_certificate /www/server/panel/vhost/cert/mcIndex/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/mcIndex/privkey.pem;
# HTTP反向代理相关配置开始 >>>
# localtion /api
location / {
proxy_pass http://127.0.0.1:9001;
proxy_set_header Host $Host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# location /preview {
# proxy_pass http://127.0.0.1:9002;
# }
# ERROR-PAGE-START 错误页相关配置,可以注释、删除或修改
# error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = 50x.html {
root html;
}
#日志配置
access_log /www/wwwlogs/mcIndex.log;
error_log /www/wwwlogs/mcIndex.error.log;
}
proxy_pass
在 Nginx 中配置
proxy_pass
时,如果在proxy_pass
后面的url
加/
,相当于是绝对根路径,则 Nginx 不会把location
中匹配的路径部分代理走;如果没有
/
,则会把匹配的路径部分给代理走。
四种模式
以 http://1.15.105.77/test/index.html
为例
# 第一种
location /test {
proxy_pass http://1.15.105.77:87/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_frowarded_for;
}
# 会被代理到http://1.15.105.77/index.html
# 第二种
location /test {
proxy_pass http://1.15.105.77:87;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_frowarded_for;
}
# 会被代理到http://1.15.105.77/test/index.html
# 第三种
location /test {
proxy_pass http://1.15.105.77:87/linux/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_frowarded_for;
}
# 会被代理到http://1.15.105.77/linux/index.html
# 第四种
location /test {
proxy_pass http://1.15.105.77:87/linux;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_frowarded_for;
}
# 会被代理到http://1.15.105.77/linuxindex.html