我在托管网站的服务器前面设置了一些代理服务器。我在网站服务器上设置了 Nginx,这样,如果请求不是来自我的代理服务器的 IP 地址,则这些请求将被拒绝,因为我希望所有流量都通过这些代理服务器。
是否可以进行设置,使我的服务器根本不响应不必要的请求?
我想使该 IP 地址看起来好像没有任何服务器在监听。
我在托管网站的服务器前面设置了一些代理服务器。我在网站服务器上设置了 Nginx,这样,如果请求不是来自我的代理服务器的 IP 地址,则这些请求将被拒绝,因为我希望所有流量都通过这些代理服务器。
是否可以进行设置,使我的服务器根本不响应不必要的请求?
我想使该 IP 地址看起来好像没有任何服务器在监听。
我已经在反向代理后面设置了 NGINX 负载均衡器。
因此,所有传入请求都具有相同的 IP 地址(反向代理的 IP 地址)。
所有这些请求都包含一个“X-Forwarded-For”标头,其中包含发起请求的客户端的 IP 地址。
是否可以配置 NGINX 以针对“X-Forwarded-For”标头的内容而不是传入请求的 IP 地址执行 ip_hash?
如果 NGINX 无法实现,那么使用其他负载均衡器(apache 等)可以吗?
注意:我无法控制反向代理设置。
我有一个在谷歌云中运行的容器,并在同一云中运行一个Mysql Db。它通过 API 接收 json 数据。处理数据时,我将数据写入数据库。
5 分钟内大约两次我收到以下日志条目:
2023/11/27 12:27:09 [warn] 15#15: *39 a client request body is buffered to a temporary file /var/lib/nginx/client_body_temp/0000000020,
尽管这只是一个警告,但它在我的日志中作为错误出现。所以它会向我的日志发送错误信息,我想摆脱它。
我对 nginx 还没有太多经验,所以我查找了值“client_body_buffer_size”,发现它是 proxy.conf 的一部分
我的设置还没有代理配置,所以我添加了一个简单的配置:proxy.conf 并将其放置在位于 /etc/nginx/proxy.conf 的 Docker 构建脚本中
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;
client_max_body_size 1m;
client_body_buffer_size 1m;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
之后,我烦人的错误消失了,但我遇到了一个更严重的错误:我的数据库收到“操作超时”错误,并且我的数据无法再写入。因此,我当然恢复了该配置并删除了 proxy.conf,现在又回到了第一个错误。
消除标题错误的正确方法和位置是什么?我可以将 client_body_buffer_size 参数添加到 httpd.conf 中吗?
我应该补充一点,发送回的数据不像图像那样大。它的大小可能为 250kb,甚至更大一些。
我已经在姐妹网站上提出了问题:https ://stackoverflow.com/questions/77556980/how-to-fix-a-client-request-body-is-buffered-to-a-temporary-file
我正在尝试为 Web 应用程序(特别是 JupyterLab,但这个问题是通用的)编写 Nginx 反向代理配置。
Web 应用程序在多个不相交的 URL 层次结构中使用多个 WebSocket 端点。例如,
/jupyter/api/yjs/...
/jupyter/terminals/...
/jupyter/api/collaboration/room/...
都是 WebSocket 端点。我写了一个临时配置,如下所示:
location /jupyter/ {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
client_max_body_size 0;
proxy_pass http://jupyter;
}
location ~ ^/jupyter/api/yjs/ {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_pass http://jupyter;
}
<repeated sections for other WebSockets endpoints>
然而,WebSockets 端点的完整列表并未记录在案。我尝试分析 nginx 和应用程序日志并推断哪些 URL 需要被代理为 WebSocket,但这显然不可靠。
有没有办法编写 nginx 配置,以便将所有传入的 WebSockets 请求代理为 WebSockets,将纯 HTTP 请求代理为纯 HTTP,而不需要在 nginx 配置中对 WebSockets 位置进行硬编码?
据我所读/理解, 和=
都是^~
普通的字符串前缀修饰符( 'reg-exp'修饰符都不是)。两者都只允许完全匹配(否则它被认为是不匹配)。如果找到完全匹配,则两者都会停止进一步的匹配过程,并立即提供伴随的“位置”。
那么这2个修饰符有什么区别呢?
我对此感到非常沮丧,因为我似乎无法弄清楚为什么会这样。
我有一个运行良好的 Django webapp。当我尝试更改 worker_connections 时,我开始遇到 CORS 问题。我恢复了这个号码,但仍然遇到 CORS 问题。
我的 nginx 配置如下所示
upstream backend {
#ip_hash;
#server 38.106.79.195;
server unix:/home/www/api.to/app.sock;
}
server {
server_name api.pdf.to;
client_max_body_size 10000m;
gzip_disable "msie6";
access_log off;
error_log on;
gzip_vary on;
gzip on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types application/javascript application/font-ttf ttf text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;
location /word/report.html {
alias /var/log/nginx/report.html;
}
location / {
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Max-Age' '3600' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' '*' always;
if ($request_method = OPTIONS ) {
return 200;
}
proxy_pass http://backend;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header REMOTE_ADDR $remote_addr;
proxy_read_timeout 1000; # this
}
location /static/downloads {
alias /home/www/api.to/static/downloads/;
add_header Content-disposition "attachment; filename=$1";
default_type application/octet-stream;
}
location /static/ {
alias /home/www/api.to/static/;
expires 35d;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
access_log off;
}
location /static/downloads {
alias /home/www/api.to/static/downloads/;
add_header Content-disposition "attachment; filename=$1";
default_type application/octet-stream;
}
location /static/ {
alias /home/www/api.to/static/;
expires 35d;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
access_log off;
}
listen 443 ssl http2; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/api.pdf.to-0001/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/api.pdf.to-0001/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
我在我的 Django 应用程序中禁用了 CORS,它工作正常,但在重新加载后它不起作用。我必须添加到我的 nginx
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Max-Age' '3600' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' '*' always;
if ($request_method = OPTIONS ) {
return 200;
}
这使得它在我将它发送到本地框时有效,但如果我将它发送到上游框(具有相同的 nginx 配置),它会给我一个 404 或 CORS 错误。
如何在 Nginx 中.txt
提供带有标题的文本 ( ) 文件?Content-Type: text/plain; Charset=UTF-8
我有一个在 Ubuntu 20.04 上运行的 nginx/1.18.0,nginx.conf
我有这个集合:
http {
(...)
include /etc/nginx/mime.types;
我mime.types
有这个:
types {
(...)
text/plain txt;
但是当我访问文本文件时,它会提供这些标题:
HTTP/1.1 200 OK
(...)
Content-Type: text/plain
但我想为它提供这些标头:
Content-Type: text/plain; charset=UTF-8
我怎样才能做到这一点?
我正在使用 X-Accel 来提供包含图像的受保护文件夹:https ://www.nginx.com/resources/wiki/start/topics/examples/x-accel/
目前我将文件存储在文件/protected_files
夹中。所以现在为了使用 X-Accel 查看文件,我传递了包含/protected_files
URL 的路径,例如protected_files/image1.jpg
.
这就是我在受保护文件夹上设置保护的方式:
location /protected_files {
internal;
}
然后为了使用 X-Accel 查看文件,我传递了带有X-Accel-Redirect
.
有没有办法屏蔽 URL,使其看起来像是从另一个 URL 提供的?喜欢/fake_folder/image1.jpg
?
我尝试但没有用的是创建另一个具有所需假名称的文件夹,然后将别名添加到真实名称:
location /fake_folder {
internal;
alias /protected_files;
}
然后我用 传递 URL /fake_folder/image1.jpg
,但我收到错误 404
我已经使用 LetsEncrypt 为证书设置了一个 Node/Express HTTPS / SSL 服务器,在端口 3000 上运行。它可以工作,我可以通过www.example.com:3000
. 但我真的希望能够直接从www.example.com
.
通过创建自己的 nginx 配置并运行sudo systemctl restart nginx
.
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _; // *
location / {
allow all; // *
}
}
server {
server_name www.example.com;
listen [::]:443 ssl;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass https://127.0.0.1:3000;
allow all; // *
}
}
设置证书时,我从 Certbot 自动生成的服务器改编了第二台服务器。
我是 nginx 配置文件的新手。任何人都可以就我的实施安全提供建议吗?我错过了什么吗?我特别想知道我附加的行// *
。提前致谢。
我正在尝试从我的家庭 WiFi 运行一个小型网站,所以我设置了一个从 localhost:8000 到端口 93 的反向 Nginx 代理。
我想知道如何从我的公共 IP 地址访问该服务器,而不仅仅是我的 localhost 端口 93。
目前,我将服务器配置中的 server_name 设置为映射到我的公共 IP 地址的名称/etc/hosts
。是否需要端口转发才能从我的公共 IP 地址访问服务器?如果是这样,我该如何设置。
我正在使用 Ubuntu 20.04。谢谢您的帮助。
杰克