nginx 常见配置案例参考(优化)
在NGINX中,可以通过配置文件和特定的指令来实现权限控制。以下是一些常见的权限控制方法:
使用
deny
指令:在NGINX配置文件中,可以使用
deny
指令来拒绝特定IP地址或IP地址范围的访问。可以将deny
指令放在server
块或location
块中。
例如,要拒绝特定IP地址的访问,可以这样配置:
server { | |
... | |
deny 192.168.0.1; # 拒绝192.168.0.1的访问 | |
... | |
} |
如果要拒绝一系列IP地址范围,可以这样配置:
server { | |
... | |
deny 192.168.0.0/24; # 拒绝192.168.0.0/24网段的访问 | |
... | |
} |
重启一下之后
再次访问,就403没有权限了
此时在06上还是可以的
在location上添加拒绝,
访问被拒绝只对这个location的资源生效
其它服务器上,没有受到限制,对这个location下的资源
使用
allow
指令:与
deny
指令相反,allow
指令用于允许特定IP地址或IP地址范围的访问。可以将allow
指令放在server
块或location
块中。
例如,要允许特定IP地址的访问,可以这样配置:
server { | |
... | |
allow 192.168.0.1; # 允许192.168.0.1的访问 | |
... | |
} |
如果要允许一系列IP地址范围,可以这样配置:
server { | |
... | |
allow 192.168.0.0/24; # 允许192.168.0.0/24网段的访问 | |
... | |
} |
拒绝网段所有,然后允许这个网段的某个IP。这样配置不行的,不会走到下面的允许,直接被拒绝了
先允许这个IP,然后拒绝该IP其它网段的,这样才能生效
使用
auth_basic
指令:auth_basic
指令用于对特定区域进行基本身份验证。可以将auth_basic
指令放在location
块中。需要与auth_basic_user_file
指令一起使用来指定密码文件。
例如,要对特定目录进行基本身份验证,可以这样配置:
location /private { | |
auth_basic "Restricted Content"; | |
auth_basic_user_file /etc/nginx/.htpasswd; # 指定密码文件 | |
} |
在上述示例中,访问以/private
开头的URL将要求用户进行身份验证。可以使用工具(如htpasswd
)生成密码文件。
如下,nginx上配置好
[root@mcw07 ~]$ vim /etc/nginx/nginx.conf
[root@mcw07 ~]$ echo '123456' >/etc/nginx/.htpasswd
[root@mcw07 ~]$ grep -C 4 htpasswd /etc/nginx/nginx.conf
include /etc/nginx/default.d/*.conf; location /machangwei {
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
try_files $uri $uri/ /machangwei.html;
} error_page 404 /404.html;
[root@mcw07 ~]$ ls -lh /etc/nginx/.htpasswd
-rw-r--r-- 1 root root 7 Nov 15 21:17 /etc/nginx/.htpasswd
[root@mcw07 ~]$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@mcw07 ~]$ nginx -s reload
[root@mcw07 ~]$
curl请求,访问报错401认证
如果是网页访问的话,会这样,提示输入用户密码
上面的密码文件配置有问题,应该按照如下的配置
在Nginx中,使用auth_basic
指令可以启用基本的HTTP身份验证。通过指定一个密码文件,Nginx可以验证用户提供的凭据。
密码文件格式如下:
user1:$apr_md5$salt$encrypted_password | |
user2:$apr_md5$salt$encrypted_password | |
... |
每行包含一个用户名和其对应的加密密码。密码使用MD5哈希算法进行加密,并使用指定的盐值进行散列。在上面的示例中,user1
和user2
是用户名,$apr_md5$salt$encrypted_password
是对应的加密密码。
请注意,上述示例中的密码加密方式是使用Apache的apr_md5
模块进行加密。这是Apache服务器默认使用的加密方式。如果你使用的是其他Web服务器或不同的加密方式,密码文件的格式可能会有所不同。
确保将密码文件放置在Nginx配置文件中指定的位置,并使用auth_basic
指令将其与特定的目录关联起来。例如:
location /private { | |
auth_basic "Restricted Content"; | |
auth_basic_user_file /etc/nginx/.pass; | |
} |
在上面的示例中,/etc/nginx/.pass
是密码文件的路径。确保该文件具有适当的权限设置,以便Nginx可以读取和验证用户凭据。
nginx auth_basic的密码文件如何生成
要生成Nginx的auth_basic密码文件,您可以按照以下步骤进行操作:
确定密码文件的位置和名称。您可以将其放置在Nginx配置文件的任意位置,并为其选择一个合适的名称。例如,您可以将其命名为
.passwd
或.password
。打开终端或命令提示符,并导航到密码文件的位置。
使用
htpasswd
命令创建密码文件。如果您没有安装apache2-utils
软件包,centos 安装yum install httpd-tools 这个包 请先安装它。在终端或命令提示符中运行以下命令:
sudo htpasswd -c /etc/nginx/.passwd username |
将/etc/nginx/.passwd
替换为您选择的密码文件路径,并将username
替换为您要创建密码的用户名。
4. 输入密码并确认。系统将要求您为所选用户名设置密码。
完成密码文件的创建后,您可以使用
auth_basic
指令将密码文件与特定的目录关联起来。在Nginx配置文件中,添加以下指令:
location /protected { | |
auth_basic "Restricted Content"; | |
auth_basic_user_file /etc/nginx/.passwd; | |
} |
将/etc/nginx/.passwd
替换为您实际使用的密码文件路径。
添加用户密码之后
页面成功访问
如果想要curl访问添加了认证的nginx,那么需要指定用户密码
4. 使用satisfy
指令:
在某些情况下,可能希望根据不同的请求方法进行不同的权限控制。可以使用satisfy
指令来指定满足哪个条件时才进行身份验证。可以将satisfy
指令放在location
块中。
例如,要仅对POST请求进行身份验证,可以这样配置:
location /login { | |
satisfy post; # 只有POST请求需要身份验证 | |
auth_basic "Restricted Content"; | |
auth_basic_user_file /etc/nginx/.htpasswd; # 指定密码文件 | |
} |
NGINX中通过location将请求定位到本地静态文件
要在NGINX中将请求定位到本地静态文件,您可以使用location
指令进行配置。以下是一个示例配置,将特定路径的请求映射到本地静态文件:
server { | |
listen 80; | |
server_name example.com; | |
root /var/www/example.com; | |
location /images/ { | |
# 将/var/www/example.com/images/目录下的文件映射到此路径 | |
root /path/to/local/images; | |
try_files $uri $uri/ /index.html; | |
} | |
location / { | |
# 其他路径的请求使用默认配置 | |
try_files $uri $uri/ /index.html; | |
} | |
} |
在上面的配置中,location /images/
指令将以/images/
开头的所有请求映射到/path/to/local/images
目录下的文件。这意味着如果您访问http://example.com/images/image.jpg
,NGINX将尝试从/path/to/local/images/image.jpg
提供该文件。
请注意,try_files
指令用于处理文件不存在的情况。在此示例中,如果请求的文件不存在,NGINX将返回404 Not Found
错误或指定的默认文件index.html
。
您可以根据您的实际需求调整路径和文件名。确保将路径设置为正确的本地文件路径,并使用正确的文件名和扩展名。
实战操作:
nginx上配置上
[root@mcw07 ~]$ echo "machangwei test" >/usr/share/nginx/html/machangwei.html
[root@mcw07 ~]$ grep -C 4 machangwei /etc/nginx/nginx.conf
deny 10.0.0.8;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf; location /machangwei {
root /usr/share/nginx/html;
try_files $uri $uri/ /machangwei.html;
} error_page 404 /404.html;
location = /404.html {
[root@mcw07 ~]$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@mcw07 ~]$ nginx -s reload
[root@mcw07 ~]$
06上请求测试,正常请求到
当把这个注释掉之后,也还是可以的,因为继承上面server标签下的了。
根据用户请求方式,直接从nginx这一层返回相应的状态 ,请求终止在nginx。
location / {
if ($request_method = POST){
return 403;
}
if ($request_method = PUT){
return 403;
}
if ($request_method = DELETE){
return 403;
}
proxy_set_header Host xx.xx.com;
proxy_pass http://xxx-nginx;
} upstream xxx-nginx {
server ip weight=10000 max_fails=3;
} xxx-nginx配置 location / {
proxy_buffering off;
proxy_set_header Host $http_host;
proxy_pass http://hoiuduan;
} upstream houduan {
server ip:9999 weight=10000;
server ip:9999 weight=10000;
server ip:9999 weight=10000;
server ip:9999 weight=10000;
}
nginx流量镜像ngx_mirror_module
某次使用场景:一次请求,后面两个服务都能获取到请求体数据。其中一个镜像流量用于用户分析用
Nginx的流量镜像功能允许你将线上实时流量镜像到其他环境,如测试环境。这个过程可以用于故障分析、性能定位和迁移评估等功能。Nginx从1.13.4版本开始引入了ngx_mirror_module模块,通过该模块可以将请求复制一份,并根据mirror location中的配置来处理这份复制的请求。
当请求到达Nginx时,如果开启了流量镜像功能,Nginx会将请求复制一份,并根据mirror location中的配置来处理这份复制的请求。你可以通过指定请求将被镜像到的URI来控制镜像流量的目的地。默认情况下,复制的请求会被自动丢弃,这样就不会对原始客户端的请求造成影响。
需要注意的是,镜像请求和原始请求是相关联的,如果镜像请求没有处理完成,原始请求可能会被阻塞。因此,在测试环境中使用流量镜像时,要确保镜像后端能够及时处理请求,以避免对原始客户端的请求造成不必要的延迟或影响。
以上信息仅供参考,建议查阅Nginx官方文档或咨询相关技术人员以获取更准确和全面的信息。
要实现Nginx的流量镜像功能,你需要进行以下步骤:
确保你的Nginx版本支持ngx_mirror_module模块。你可以在Nginx的配置文件中添加
http { ... }
块,并在其中添加load_module /path/to/ngx_http_mirror_module.so;
指令来加载该模块。在Nginx的配置文件中添加mirror location块。在该块中,你可以指定镜像请求的URI和目标服务器。例如:
location /mirror {
internal;
proxy_pass http://mirror_backend;
}
上述配置将请求复制到名为mirror_backend
的后端服务器上。
3. 在需要镜像流量的原始请求中添加mirror
指令。例如:
location / {
proxy_pass http://backend;
mirror /mirror;
}
上述配置将原始请求转发到名为backend
的后端服务器上,并将复制的请求发送到mirror_backend
后端服务器上。
4. 重新加载或重启Nginx以使配置生效。
请注意,Nginx的流量镜像功能仅在开发环境和测试环境中使用。在生产环境中使用流量镜像可能会对性能和稳定性产生负面影响。因此,在使用流量镜像功能之前,请确保你了解其工作原理和潜在风险,并谨慎评估其适用性和必要性。
版本
# openresty -v
nginx version: openresty/1.19.3.1
openresty 配置
# vim /usr/local/openresty/nginx/conf/nginx.conf
server {
listen 8005;
#listen somename:8080;
server_name somename alias another.alias; location / {
#root /home/ares/mcw/mcwgitlab3;
# index index.html index.htm;
proxy_pass http://10.1x.xx.50:5000;
mirror /mirror;
}
location /mirror {
internal;
proxy_pass http://10.1x.xx.50:5005;
}
}
}
5005服务的
# cat jiandan.py
from flask import Flask,request, render_template
app = Flask(__name__)
#app.config['APPLICATION_ROOT'] = '/mirror' @app.route('/mirror',methods=['GET', 'POST'])
def home():
print("=======>request.headers")
print(request.headers)
cc=str(request.headers)
bb=''
if request.method == 'POST':
print('=======>request.form')
print(request.form)
bb= str(request.form)
return '%s,%s'%(cc,bb)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5005)
#
另外一个5000端口的,是下面这个网站
访问该网站
当5005服务,路由没有带mirror的时候,会找不到,路由上带了,才能找到
找不到的时候,也就是5005服务没有使用/mirror做路由的时候,匹配不到视图函数,5000服务会提示两个,一个成功,一个404,
当5005服务,添加了mirror作为路由的时候,那么5000服务那里不会显示对5005服务的请求结果,并且5005服务上正常匹配到路由,打印出信息,包括get和post请求,都可以
client_max_body_size
client_max_body_size 500m;
client_max_body_size 500m;
如下配置:
之前是上传500M ,上传2G以上的视频,报错413好像是这个错误。然后nginx改完5G,k8s ingress也改为5G就可以正常上传了。
这个域名对应的后端服务在k8s里,k8s应用是将上传的文件存入到阿里云oss中。
最大身体大小,应该是现在包的总的大小,而身体缓冲大小,只是写入缓冲,不需要跟最大身体大小一样大,个人理解。
cat xx/xx/rewrite/fex-cloud
location / {
client_max_body_size 5G;
client_body_buffer_size 500M;
proxy_redirect off;
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_http_version 1.1;
proxy_pass http://fex-cloud;
}
ingress:
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/proxy-body-size: 5120m
nginx.ingress.kubernetes.io/proxy-connect-timeout: '60'
nginx.ingress.kubernetes.io/proxy-read-timeout: '60'
nginx.ingress.kubernetes.io/proxy-send-timeout: '60'
nginx.ingress.kubernetes.io/service-weight: ''
nginx.ingress.kubernetes.io/enable-cors: "true" spec:
rules:
- host:
流式输出proxy_buffering off;
添加proxy_buffering off;,支持流式输出。比如ai大模型中使用,如果没有的话,那么返回的文字是一块一块的渲染显示,如果配置了这个,那么就是一个一个的渲染显示,逐条显示,而不是多条一起显示。注意,如果a调用b,b调用chatgtp,那么这两个域名都要配置,因为这里遇到过,b没有配置,然后导致流式输出没有生效
location / {
proxy_pass ...
......
proxy_buffering off;
}
k8s ingress的添加
ingress:
metadata:
annotations:
nginx.ingress.kubernetes.io/proxy-buffering: "off"
spec:
rules:
- host: test-ai-xx-api.xx.com
- host: test-ai-xx-api.xx.com
流式配置,比如域名解析到腾讯lb。lb转发到腾讯nginx云服务器,再到腾讯容器服务。这个路程中,配置nginx ,k8s ingress就可以了,lb不用做操作
基本的配置,可以看到客户端IP的
location / {
proxy_pass http://k8s-tx;
proxy_redirect off;
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_http_version 1.1;
}
前端放到minio参考配置
rewrite ^/statics/(.*).(svg|tif|tiff|wbmp|png|bmp|fax|gif|ico|jfif|jpe|jpeg|jpg|woff|cur|webp|swf|ttf|eot|woff2|css|js|txt|json|xhtml|html|map|exml|mp3|mp4|ogg|m4a)$ /frontend-old/oxxxsite/www.xx.com/statics/$1.$2 last;
rewrite ^/(en|pt|ru|in)$ /frontend-old/official-website/www.xx.com/$1/index.html last;
rewrite ^/(en|pt|ru|in)/$ /frontend-old/official-website/www.xx.com/$1/index.html last;
rewrite ^/(en|pt|ru|in)/(.*)/$ /frontend-old/official-website/www.xx.com/$1/$2.html last;
rewrite ^/(en|pt|ru|in)/(.*) /frontend-old/official-website/www.xx.com/$1/$2.html last; set $host_mobile $host; if ($http_user_agent ~* "GoBrowser|MIDP|WAP|UP\.Browser|Obigo|Mobile|mobile|AU\.Browser|wxd\.Mms|WxdB\.Browser|CLDC|UP\.Link|KM\.Browser|UCWEB|SEMC-Browser|Mini|Symbian|Palm|Nokia|Panasonic|MOT-|SonyEricsson|NEC-|Alcatel|Ericsson|BENQ|BenQ|Amoisonic|Amoi|Capitel|PHILIPS|SAMSUNG|Lenovo|Mitsu|Motorola|SHARP|WAPPER|LG-|LG/|EG900|CECT|Compal|kejian|Bird|BIRD|G900/V1\.0|Arima|CTL|TDG|Daxian|DBTEL|Eastcom|EASTCOM|PANTECH|Dopod|Haier|HAIER|KONKA|KEJIAN|LENOVO|Soutec|SOUTEC|SAGEM|SEC|SED-|EMOL|INNO55|ZTE|Phone|phone|Android|WindowssCE|DX|TELSON|TCL|oppo|ChangHong|MALATA|TIANYU|MAUI|J2ME|BlackBerry|yulong|NOKIA|UNTRUSTED|SCH-|LGE-|CTC/1|kyocera|CEC-|DAXIAN|Sanyo-|Openwave|htc|Maemo|maemo|Mobi") {
set $host_mobile m.xx.com;
} location ^~ /frontend-old {
if ($request_method = POST){
return 403;
}
if ($request_method = PUT){
return 403;
}
if ($request_method = DELETE){
return 403;
}
proxy_set_header Host minio-xx.xxx.com;
access_by_lua_block {
ngx.ctx.upstream_name = "minio-xx-nginx"
}
proxy_pass http://backend;
#proxy_pass http://minio-xx-nginx;
} location = / {
access_by_lua_block {
ngx.ctx.upstream_name = "k8s-haproxy-xx"
}
proxy_pass http://backend_keepalive_64;
#proxy_pass http://k8s-haproxy-xx;
proxy_redirect off;
proxy_set_header Host www.xxx.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
} location / {
access_by_lua_block {
ngx.ctx.upstream_name = "k8s-haproxy-xx"
}
proxy_pass http://backend_keepalive_64;
#proxy_pass http://k8s-haproxy-xx;
proxy_redirect off;
proxy_set_header Host $host_mobile;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
nginx->haproxy->k8s的配置参考
➜ my-nginx git:(machangwei5) cat rewrite/qa-k8s
location / {
proxy_pass http://xx-k8s-ha2; proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
➜ my-nginx git:(machangwei5) ➜ my-nginx git:(machangwei5) cat upstream/zz-idc/xx-k8s-ha2
upstream yf-k8s-ha2 {
#server 10.10.16.31:8008 max_fails=3 weight=10000; # minio001.yf.mcw.cn
#server 10.10.14.9:8008 max_fails=3 weight=10000; # vm-minio-proxy001.yf.mcw.cn
server 10.11.14.29:8008 max_fails=3 weight=10000; # vm-minio-proxy001.zz.mcw.cn
}
➜ my-nginx git:(machangwei5) # less /etc/haproxy/haproxy.cfg
listen test1
bind 0.0.0.0:8008
mode tcp
option tcpka
log 127.0.0.1 local2 info
balance roundrobin timeout client 600000 # 设置特定监听的客户端超时时间
timeout server 600000 # 设置特定监听的服务器超时时间 #server s1 10.0.8.37:80 weight 1 maxconn 10000 check inter 10s
#server s2 10.0.8.38:80 weight 1 maxconn 10000 check inter 10s
#server s3 10.0.8.39:80 weight 1 maxconn 10000 check inter 10s
# server s2 10.0.15.221:30080 weight 1 maxconn 10000 check inter 10s
server s2 10.0.15.218:30080 weight 1 maxconn 10000 check inter 10s
# server s2 10.0.15.219:30080 weight 1 maxconn 10000 check inter 10s # kubectl get svc --all-namespaces|grep 30080
ingress-nginx ingress-nginx-controller NodePort 10.xx.1xx.178 <none> 80:30080/TCP,443:30228/TCP 11d
[root@vm-qa-kubemaster001.zz.mcw.cn mcw]# [root@vm-qa-kubemaster001.zz.mcw.cn mcw]# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
qa-x3.zz.mcw.cn Ready <none> 11d v1.28.0 10.0.15.219 <none> CentOS Linux 7 (Core) 4.xpo.x86_64 docker://30.12.7
qa-kube004.zz.mcw.cn Ready <none> 11d v1.28.0 10.0.15.218 <none> CentOS Linux 7 (Core) 5.x7.x86_64 docker://30.12.7
vm-qx002.zz.mcw.cn Ready <none> 11d v1.28.0 10.xx.20.3 <none> CentOS Linux 7 (Core) 5xl7.x86_64 docker://30.12.7
vm-qaxter001.zz.mcw.cn Ready control-plane,master 11d v1.28.0 10.xx.1xx4.7 <none> CentOS Linux 7 (Core) 4.xel7.elrepo.x86_64 docker://30.12.7
[root@vm-qa-kubemaster001.zz.mcw.cn mcw]# 综上: nginx->haproxy->k8s ingress
80 rewrite调转443配置参考
server {
listen 80;
server_name sso.xxcn.com; rewrite ^ https://$server_name$request_uri? permanent; access_log /data/logs/nginx/sso-xxcn_access.log main;
error_log /data/logs/nginx/sso-xxscn_error.log;
} server {
listen 443 ssl;
server_name sso.xxcn.com; location / {
proxy_redirect off;
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 https;
proxy_set_header X-Forwarded-Port 443;
access_by_lua_block {
ngx.ctx.upstream_name = "sso"
}
proxy_pass http://backend_keepalive_64;
#proxy_pass http://sso;
proxy_http_version 1.1;
proxy_set_header Connection "";
} ssl_certificate ssl/xxcn.com.crt;
ssl_certificate_key ssl/xxcn.com.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
access_log /data/logs/nginx/sso-xxcn_access.log main;
error_log /data/logs/nginx/sso-xxcn_error.log;
}
配置文件参考nginx
一
# cat /usr/local/openresty/nginx/conf/nginx.conf
user nobody nobody; worker_processes auto; error_log /data/logs/nginx/nginx_error.log notice; pid logs/nginx.pid; #Specifies the value for maximuM FIle descriptors that can be opened by this process.
worker_rlimit_nofile 51200; events {
use epoll;
worker_connections 51200;
multi_accept on;
} http {
#realip module
#include realip.conf; include mime.types;
default_type application/octet-stream; server_names_hash_bucket_size 512;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 200m;
client_body_buffer_size 1024k; sendfile on;
tcp_nopush on; keepalive_timeout 300; tcp_nodelay on; fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k; gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css text/xml application/xml application/atom+xml text/javascript application/json;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\."; server_tokens off;
#log format
log_format main '$remote_addr - $remote_user [$time_local] "$request_method $uri $server_protocol" '
'$status $request_length $body_bytes_sent $http_host "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" $request_time $upstream_response_time '
'$upstream_addr $upstream_status $upstream_response_length $http_content_length'; lua_shared_dict logdict 5m;
log_by_lua_file luascripts/log.lua; include vhost/*.conf;
}
web socket支持配置
cat rewrite/zz-jumpserver-xx
location / {
proxy_pass http://zz-jumpserver-xxx;
proxy_redirect off;
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 Connection "";
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
新增后四行
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
nginx 常见配置案例参考(优化)的更多相关文章
- Httpd服务入门知识-Httpd服务常见配置案例之日志设定
Httpd服务入门知识-Httpd服务常见配置案例之日志设定 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.日志类型 [root@node101.yinzhengjie.org ...
- Httpd服务入门知识-Httpd服务常见配置案例之显示服务器版本信息
Httpd服务入门知识-Httpd服务常见配置案例之显示服务器版本信息 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.httpd配置文件的组成 1>.主要组成 Globa ...
- Httpd服务入门知识-Httpd服务常见配置案例之虚拟主机
Httpd服务入门知识-Httpd服务常见配置案例之虚拟主机 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.虚拟主机实现方案 1>.Apache httpd 有三种实现虚 ...
- Httpd服务入门知识-Httpd服务常见配置案例之Apache的工作做状态status页面
Httpd服务入门知识-Httpd服务常见配置案例之Apache的工作做状态status页面 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.status功能概述 status页 ...
- Httpd服务入门知识-Httpd服务常见配置案例之ServerSignature指令选项
Httpd服务入门知识-Httpd服务常见配置案例之ServerSignature指令选项 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.ServerSignature指令概述 ...
- Httpd服务入门知识-Httpd服务常见配置案例之实现用户家目录的http共享
Httpd服务入门知识-Httpd服务常见配置案例之实现用户家目录的http共享 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.实现用户家目录的http共享前提 在配置家目录共 ...
- Httpd服务入门知识-Httpd服务常见配置案例之定义路径别名
Httpd服务入门知识-Httpd服务常见配置案例之定义路径别名 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.创建测试数据 [root@node101.yinzhengj ...
- Httpd服务入门知识-Httpd服务常见配置案例之设定默认字符集
Httpd服务入门知识-Httpd服务常见配置案例之设定默认字符集 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看生产环境中使用的字符集案例 1>.查看腾讯设置的默认 ...
- Httpd服务入门知识-Httpd服务常见配置案例之基于客户端来源地址实现访问控制
Httpd服务入门知识-Httpd服务常见配置案例之基于客户端来源地址实现访问控制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Options 1>.OPTIONS指 ...
- Httpd服务入门知识-Httpd服务常见配置案例之基于用户账号实现访问控制
Httpd服务入门知识-Httpd服务常见配置案例之基于用户账号实现访问控制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.基于用户的访问控制概述 认证质询: WWW-Auth ...
随机推荐
- OpenHarmony 3.2 Beta多媒体系列——音视频播放框架
一.简介 媒体子系统为开发者提供一套接口,方便开发者使用系统的媒体资源,主要包含音视频开发.相机开发.流媒体开发等模块.每个模块都提供给上层应用对应的接口,本文会对音视频开发中的音视频播放框架做一 ...
- SQL FOREIGN KEY 约束- 保障表之间关系完整性的关键规则
SQL FOREIGN KEY 约束 SQL FOREIGN KEY 约束用于防止破坏表之间关系的操作.FOREIGN KEY 是一张表中的字段(或字段集合),它引用另一张表中的主键.具有外键的表称为 ...
- Numpy广播功能
广播(Broadcast)是对不同形状(shape)的数组进行数值计算的方式. 广播规则: 如果两个数组的维度数不相同,那么小维度数组的形状将会在最左边补1: 如果两个数组的形状在任何一个维度都不匹配 ...
- 「译文」深入了解Kubernetes和Nomad
️原文链接: https://www.cncf.io/blog/2023/10/23/introduction-a-closer-look-at-kubernetes-and-nomad/ ✍️作者: ...
- ViT:拉开Trasnformer在图像领域正式挑战CNN的序幕 | ICLR 2021
论文直接将纯Trasnformer应用于图像识别,是Trasnformer在图像领域正式挑战CNN的开山之作.这种简单的可扩展结构在与大型数据集的预训练相结合时,效果出奇的好.在许多图像分类数据集上都 ...
- Spring Cloud 核心组件之Spring Cloud Zuul:API网关服务
Spring Cloud Zuul:API网关服务 SpringCloud学习教程 SpringCloud API网关 Spring Cloud Zuul 是Spring Cloud Netflix ...
- C++对象封装后的内存布局
在C语言中,数据和数据的处理操作(函数)是分开声明的,在语言层面并没有支持数据和函数的内在关联性,我们称之为过程式编程范式或者程序性编程范式.C++兼容了C语言,当然也支持这种编程范式.但C++更主要 ...
- 《c#高级编程》第4章C#4.0中的更改(九)——协变和逆变
动态字典(Dynamic Dictionary)是指一个键值对集合,其中键和值的类型都可以在运行时确定并且可以动态变化.在C#中,可以使用 dynamic 关键字来实现这一功能. 例如,下面的代码演示 ...
- 「开源人说」|AI普惠,阿里灵杰开源历程与思考
简介: 施兴 阿里巴巴资深技术专家 阿里巴巴开源项目EasyRec负责人 以下为开发者社区「开源人说」第四期--大数据&AI专场的主题分享,点击链接了解更多精彩详情 https://devel ...
- bilibili 实时平台的架构与实践
摘要:本文由 bilibili 大数据实时平台负责人郑志升分享,基于对 bilibili 实时计算的痛点分析,详细介绍了 bilibili Saber 实时计算平台架构与实践.本次分享主要围绕以下四个 ...