nginx setup
PCRE2 已经是主流了,当前最新版是 10.44(2024年发布)
下载
wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
解压
tar -zxvf pcre-8.37.tar.gz
进目录
cd pcre-8.37
配置、编译、安装
./configure --prefix=/usr/local
make && make install
使用 yum 安装(如果系统仓库中已有)
sudo yum install pcre2-devel
或者从源码编译安装
wget https://github.com/PhilipHazel/pcre2/releases/download/pcre2-10.44/pcre2-10.44.tar.gz
tar -zxvf pcre2-10.44.tar.gz
cd pcre2-10.44
./configure --prefix=/usr/local
make && sudo make install
查看开放的端口号
firewall-cmd – list-all+
设置开放的端口号
firewall-cmd – add-service=http -permanent
sudo firewall-cmd --add-port=80/tcp --permanent
重启防火墙
firewall-cmd -reload
Nginx 的常用命令和配置文件:
2、查看nginx的版本号
nginx -v
3、启动 nginx
nginx
4、关闭nginx
nginx -s stop
5、重新加载 nginx
nginx -s reload
配置域名:
C:\Windows\System32\drivers\etc\HOSTS
2)通过修改本地 host 文件,将 keycloak.demofor.com.cn 映射到 127.0.0.1,如下:
127.0.0.1 keycloak.demofor.com.cn
127.0.0.1 kc.9000.demofor.com.cn
Nginx 配置实例1 反向代理
Nginx 配置实例2 负载均衡
一、默认轮询:
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
location / {
proxy_pass http://backend_servers;
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版本信息
server_tokens off;
错误页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
在server 后面
# 后端服务器组配置
upstream backend_servers {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
二、权重,weight 默认为1,值越大,访问越多
# 后端服务器组配置
upstream backend_servers {
server 127.0.0.1:8080 weight=3;
server 127.0.0.1:8081 weight=2;
server 127.0.0.1:8082 weight=1;
}
三、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。例如:
upstream backend_servers {
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
三、fair
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend_servers {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
fair;
}
Nginx 配置实例3 动静分离
location /image/ {
root /data/
expires 30d;
add_header Cache-Control "public, immutable";
access_log off;
log_not_found off;
autoindex on;
}
静态资源直接由nginx处理
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
root /var/www/html;
expires 30d;# 更新200,不更新304
add_header Cache-Control "public, immutable";
access_log off;
log_not_found off;
}
错误记录
报错:D:\nginx-1.29.4>nginx 执行后,报错提示信息如下:
nginx: [emerg] could not build server_names_hash, you should increase server_names_hash_bucket_size: 32
解决方法:在http 里加入:
server_names_hash_max_size 1024;
server_names_hash_bucket_size 128;
高可用 keepalived—这个没有试验,只是笔记

主:192.168.15.128
#检测脚本
vrrp_script chk_http_port {
script "/usr/local/src/check_nginx_pid.sh" #心跳执行的脚本,检测nginx是否启动
interval 2 #(检测脚本执行的间隔,单位是秒)
weight 2 #权重
}
#vrrp 实例定义部分
vrrp_instance VI_1 {
state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备
interface 网卡 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
virtual_router_id 66 # 虚拟路由编号,主从要一直
priority 100 # 优先级,数值越大,获取处理请求的优先级越高
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
#授权访问
authentication {
auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth_pass 1111
}
track_script {
chk_http_port #(调用检测脚本)
}
virtual_ipaddress {
192.168.15.130 # 定义虚拟ip(VIP),可多设,每行一个
}
}
备:192.168.15.129
global defs{
notification email{
abc@firewall.loc
ac@firewall.loc
}
notification_email_from tt@firewall.loc
smtp server 192.168.15.129
smtp_connect timeout 30
router id LVS DEVELBACK
}
#检测脚本
vrrp_script chk_http_port {
script "/usr/local/src/check_nginx_pid.sh" #心跳执行的脚本,检测nginx是否启动
interval 2 #(检测脚本执行的间隔)
weight 2 #权重
}
#vrrp 实例定义部分
vrrp_instance VI_1 {
state BACKUP # 指定keepalived的角色,MASTER为主,BACKUP为备
interface 网卡 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
virtual_router_id 66 # 虚拟路由编号,主从要一直
priority 99 # 优先级,数值越大,获取处理请求的优先级越高
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
#授权访问
authentication {
auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth_pass 1111
}
track_script {
chk_http_port #(调用检测脚本)
}
virtual_ipaddress {
192.168.15.130 # 定义虚拟ip(VIP),可多设,每行一个
}
}
virtual_ipaddress 里面可以配置vip,在线上通过vip来访问服务。
interface需要根据服务器网卡进行设置通常查看方式ip addr
authentication配置授权访问后备机也需要相同配置
local 规则
1、 =: 用于不含正则表达式的uri 前,要求请求字符串与uri 严格匹配,如果匹配
成功,就停止继续向下搜索并立即处理该请求。
2、~上:用于表示uri 包含正则表达式,并且区分大小写。
3、 ~*: 用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~: 用于不含正则表达式的 uri 前,要求Nginx 服务器找到标识uri 和请求字
符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location
块中的正则uri 和请求字符串做匹配。
注意:如果uri 包含正则表达式,则必须要有~或者 ~* 标识。~
补充一下我的配置
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server_names_hash_max_size 1024;
server_names_hash_bucket_size 128;
#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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name kc.9000.demofor.com.cn;
location / {
proxy_pass http://localhost:9000;
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;
index index.html index.htm;
# 连接和超时设置
proxy_connect_timeout 30s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
# 支持WebSocket连接(如果需要)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# 静态资源缓存优化(如果后端提供静态资源)
#location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
# proxy_pass http://kcapp_backend;
# 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;
# 静态资源缓存设置
# expires 30d;
# add_header Cache-Control "public, immutable";
# }
# 健康检查端点(可选)
location /health {
access_log off;
return 200 "healthy\n";
add_header Content-Type text/plain;
}
}
server {
listen 80;
server_name keycloak.demofor.com.cn;
#access_log logs/host.access.log main;
location / {
root html;
proxy_pass http://localhost:8080;
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;
index index.html index.htm;
# 连接和超时设置
proxy_connect_timeout 30s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
# 支持WebSocket连接(如果需要)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 错误处理
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
}
# 静态资源缓存优化(如果后端提供静态资源)
#location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
# proxy_pass http://kcapp_backend;
# 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;
# 静态资源缓存设置
# expires 30d;
# add_header Cache-Control "public, immutable";
# }
# 健康检查端点(可选)
location /health {
access_log off;
return 200 "healthy\n";
add_header Content-Type text/plain;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
更多推荐




所有评论(0)