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;
    #    }
    #}

}

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐