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 ...
随机推荐
- 这一次,让我们一起来搞懂MySQL
欢迎加入我的专栏,和我一起开始 MySQL 学习之旅. 从日常的开发和优化中,一步步地从一个数据库小白成为 MySQL 调优的开发人员.回想起来,从我第一次带创建索引至今,已经有十个年头了.在这个过程 ...
- szfpga Lattice高速下载器HW-USBN-2B 常见问题解答
.产品特点 1). 支持windows7,Windows10 操作系统,两个操作系统非常稳定不断线. 2). 支持JTAG 模式,速度快,最高30Mb/s,调试serdes core,不会像hw-us ...
- Jenkins实战系列(一)——Jenkins简介
Jenkins是一个开源的自动化构建工具,可以帮助开发人员自动构建.测试和部署软件.它支持多种编程语言.版本控制系统和构建工具,如Java.Git.Maven等.Jenkins的核心功能是通过一系列插 ...
- JVM简明笔记4:垃圾回收
1 垃圾回收相关算法 垃圾回收器首先要做的就是,判断一个对象是存活状态还是死亡状态,死亡的对象将会被标识为垃圾数据并等待收集器进行清除. 判断一个对象是否为死亡状态的常用算法有两个:引用计数器算法 . ...
- HarmonyOS NEXT应用开发之MpChart图表实现案例
介绍 MpChart是一个包含各种类型图表的图表库,主要用于业务数据汇总,例如销售数据走势图,股价走势图等场景中使用,方便开发者快速实现图表UI.本示例主要介绍如何使用三方库MpChart实现柱状图U ...
- [GPT] 序列模型分类及其模型方案选择
序列模型可以分为两大类:线性序列模型和非线性序列模型. 线性序列模型:这类模型基于线性关系对时间序列进行建模和预测.常见的线性序列模型包括自回归模型(AR).移动平均模型(MA)和自回归移动平均模 ...
- [FAQ] 快速上手 Final Cut Pro X 的入门教程
FinalCutPro视频剪辑 基本操作教学,看下面的视频作为一个大致了解.另外遇到其它问题再针对性搜索解决即可. > 在线CF靶场 射击消除烦闷 Link:https://www.cnblog ...
- [Contract] Solidity 多种访问控制 (Access Control) 实现方式
在 solidity 中控制访问,一般是通过 modifier 修饰符方法来直接做. 那么对于稍复杂的多种访问控制,通常需要一个统一操作的模块化类库. 现在已经有了这样的类库存在,我们通过一个实现功能 ...
- 非技术 对以后各大应用功能与 AI 助手的思考
本文记录我对于 AI 助手在未来给各大应用或网站或设备带来的影响的思考 结论:未来的各大应用或网站或者是设备,都不会出现满屏的眼花缭乱的功能,取代的是各自有一个专属的 AI 助手,通过 AI 助手与人 ...
- dotnet Microsoft.Recognizers.Text 超强大的自然语言关键词提取库
本文和大家介绍一个使用超级简单,但是功能特别强大的自然语言关键词提取库,可以根据输入的自然语言提取出里面的信息.例如我在一句话里面说了哪些数值变量或者说了手机号码等 先看看下图的一个效果,下图是尝试识 ...