nginx 去掉服务器版本和名称和nginx_status 状态说明

本文介绍如何通过配置文件修改来隐藏Nginx和PHP的版本信息,增强服务器安全性,包括隐藏Nginx版本号、PHP版本号及伪装Nginx版本的方法。

可能有时候我们看某些站点想知道别人在使用什么版本的web服务器之类的信息时,却发现并未显示版本号,甚至连WEB服务器都有变化,可以通过以下方法来隐藏Nginx、PHP的版本号信息,来提升一定的安全性;(当然了,这都是些小打小闹的措施,重点还是在其他防护措施上!)
一、隐藏Nginx版本号
第一步:
vi /usr/local/nginx/conf/nginx.conf
在http{}中加入
server_tokens off;
第二歩:
vi /usr/local/nginx/conf/fastcgi_params
将里面的
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
修改为:
fastcgi_param SERVER_SOFTWARE nginx;
二、隐藏php版本号
vi php.ini
找到:
expose_php = On;
修改为:
expose_php = Off;
重启!
三、伪装Nginx
vi /src/core/nginx.h
修改其中:
#define NGINX_VERSION “1.0″
#define NGINX_VER “GWS/” NGINX_VERSION
重新编译nginx;
以上就是伪装Nginx,隐藏Nginx、PHP版本号并提升服务器安全性全部过程。

 

打开nginx的stub_status可以通过页面链接看到如下信息:

Active connections: 145 
server accepts handled requests
 1749 1749 3198 
Reading: 0 Writing: 3 Waiting: 142

参数详解:  

Active connections:145            
#nginx 正处理的活动连接数145个。
server accepts handled requests
 1749 1749 3198                    
#nginx启动到现在共处理了 1749个连接 ,nginx启动到现在共成功创建 1749次握手 请求丢失数=(握手-连接),可以看出,我们没丢请求;总共处理了3198 次请求。
Reading: 0 Writing: 3 Waiting: 142 
#Reading :nginx读取到客户端的Header信息数。
#Writing : nginx返回给客户端的Header信息数。
#Waiting : Nginx已经处理完正在等候下一次请求指令的驻留连接.开启keep-alive的情况下,这个值等于active–(reading+writing)。

转载于:https://www.cnblogs.com/dfsxh/p/10301491.html

<think>嗯,用户现在的问题是关于在Nginx服务器上传文件时保持扩展名不被破坏,想要知道如何配置。首先,我需要回顾之前提供的回答,其中详细讨论了Nginx配置错误导致非常规扩展名被解析为PHP的问题,以及相关的修复方法。用户现在的问题虽然与上传文件有关,但重点在于保留原始扩展名,这可能涉及到上传模块的正确配置,防止服务器修改或删除上传文件的扩展名。 根据用户提供的引用内容,引用[2]提到了Nginx配置PHP处理上传文件,其中使用了`location ~* \.php$`来支持PHP解析,但用户现在的问题不是解析PHP,而是保留扩展名。引用[3]中的`proxy_pass`示例可能与上传文件无关,但可能涉及反向代理的配置,不过用户的问题更侧重于上传处理。 用户的需求是上传文件时保留原始扩展名,这可能涉及到Nginx的上传模块配置,比如`nginx-upload-module`或者`ngx_http_dav_module`。需要确保在配置中,上传的文件名不会被修改,包括扩展名。同时,可能还需要考虑安全因素,比如防止恶意文件上传,但用户的主要诉求是保留扩展名。 首先,需要确定用户使用的上传模块是什么。常见的如`nginx-upload-module`,它允许客户端上传文件到服务器,并可以配置上传路径、文件名等。在配置这个模块时,需要设置`upload_pass`指定处理上传的路径,`upload_store`定义存储目录,并且可能需要使用`upload_set_form_field`来保留原始文件名扩展名。 其次,可能需要处理上传后的文件名。默认情况下,有些模块可能会生成随机文件名,导致扩展名丢失。因此,配置中需要显式指定保留原始文件名,比如通过变量`$upload_file_name`或类似的方式获取客户端上传的文件名,并存储时使用该变量。 另外,用户可能希望上传后的文件扩展名与原始一致,所以需要确保Nginx不会对上传的文件进行任何重命名操作。同时,要考虑到安全设置,比如限制上传的文件类型,避免执行恶意脚本,但用户当前的问题主要是保留扩展名,而不是安全性。 在之前的回答中,提到了上传目录的执行隔离,禁止PHP文件执行,这可能与当前问题相关,但用户现在关注的是扩展名的保留,而不是执行权限。因此,需要将重点放在如何配置上传模块以保留原始扩展名上。 可能的配置步骤包括: 1. 安装并启用Nginx的上传模块,如`nginx-upload-module`。 2. 在Nginx配置文件中设置上传路径参数,确保`upload_store`使用原始文件名。 3. 配置`upload_pass`指向处理上传的后端服务,如果需要的话。 4. 使用`upload_set_form_field`来保留原始文件名扩展名,并传递给后端应用。 5. 验证配置是否正确,测试上传文件后是否保留了扩展名。 同时,需要注意客户端可能在上传时修改文件名,但服务器端应如实保存客户端提供的文件名(包括扩展名),除非有安全策略需要过滤或重命名。因此,配置中应避免任何重命名操作,直接使用原始文件名存储。 还需要检查是否有其他模块或配置可能干扰上传文件的处理,比如重写规则或代理设置,确保它们不会修改文件名。例如,`proxy_pass`可能会将请求转发到后端,但上传模块的处理应在Nginx层面完成,不会经过代理。 最后,测试配置的有效性,上传不同扩展名的文件,检查服务器存储的文件名是否与客户端一致,确保扩展名未被破坏。如果出现问题,可能需要调整配置中的正则表达式或变量使用,确保正确捕获存储原始文件名。</think>### Nginx文件上传保留原始扩展名的配置指南 --- #### **一、核心配置原理** Nginx通过第三方模块(如`nginx-upload-module`)实现文件上传时,需通过特定指令控制文件名存储逻辑。保留原始扩展名的关键在于**完整捕获客户端原始文件名**并正确传递给存储系统。 --- #### **二、具体配置方法** ##### **1. 基础配置模板** ```nginx # 在http或server区块启用上传模块 upload_pass /upload_endpoint; upload_store /var/www/uploads; upload_store_access user:rw group:rw all:r; # 保留原始文件名及扩展名(核心配置) upload_set_form_field $upload_field_name.name "$upload_file_name"; # 包含扩展名的完整文件名 upload_set_form_field $upload_field_name.content_type "$upload_content_type"; upload_set_form_field $upload_field_name.path "$upload_tmp_path"; # 限制上传大小 client_max_body_size 100M; ``` **关键参数说明**: - `upload_store`:指定存储目录,需确保Nginx进程有写入权限 - `upload_set_form_field`:通过`$upload_file_name`变量保留原始文件名[^2] ##### **2. 扩展名安全处理** ```nginx # 添加扩展名白名单控制 map $upload_file_name $allowed_extension { ~* \.(jpg|png|pdf)$ 1; # 允许的扩展名列表 default 0; } if ($allowed_extension = 0) { return 415 "Unsupported Media Type"; } ``` **安全机制**:通过`map`指令实现动态扩展名过滤,阻断危险文件类型上传 ##### **3. 后端数据传递配置** ```nginx location /upload_endpoint { # 将原始文件名传递给后端应用 proxy_set_header X-File-Name $upload_file_name; proxy_set_header X-File-Ext $upload_file_ext; # 单独获取扩展名 proxy_pass http://backend_app; } ``` **数据流说明**: 客户端上传 → Nginx接收存储 → 携带原始文件名信息 → 转发到应用服务器 --- #### **三、完整配置示例** ```nginx http { upload_module on; server { listen 80; server_name upload.example.com; # 文件上传路由 location /upload { # 基础上传配置 upload_pass /api/process; upload_store /var/www/uploads; upload_limit_rate 0; # 不限速 upload_max_file_size 100M; # 保留原始元数据 upload_set_form_field uploaded_file[name] "$upload_file_name"; upload_set_form_field uploaded_file[content_type] "$upload_content_type"; upload_set_form_field uploaded_file[tmp_path] "$upload_tmp_path"; # 扩展名白名单验证 if ($upload_file_name !~* \.(docx|xlsx|pdf)$ ) { return 403 "Forbidden file type"; } } # 后端处理接口 location /api/process { proxy_pass http://127.0.0.1:8000; proxy_set_header X-Original-Filename $upload_file_name; # 传递原始文件名 } } } ``` --- #### **四、安全增强措施** ##### **1. 文件名消毒处理** ```nginx # 去除特殊字符 upload_cleanup on; upload_rename "^[^A-Za-z0-9_\-\.]++" ""; # 正则替换非法字符 ``` ##### **2. 存储目录隔离** ```bash # 创建专用上传目录 mkdir -p /var/www/uploads/{temp,processed} chown -R www-data:www-data /var/www/uploads chmod 750 /var/www/uploads/temp # 禁止直接执行 ``` ##### **3. 日志监控配置** ```nginx log_format upload_log '$remote_addr - [$time_local] "$upload_file_name" $status'; access_log /var/log/nginx/upload.log upload_log; ``` --- #### **五、验证测试方法** 1. **基础功能测试**: ```bash # 使用curl测试文件上传 curl -F "file=@test.pdf" http://upload.example.com/upload # 检查/var/www/uploads目录是否生成test.pdf ``` 2. **扩展名保留验证**: ```bash ls -l /var/www/uploads | grep -E '\.docx|\.xlsx' # 确认包含原始扩展名 ``` 3. **安全规则测试**: ```bash # 尝试上传PHP文件 curl -F "file=@shell.php" http://upload.example.com/upload # 应返回403错误[^1] ``` --- ### 相关问题 1. 如何通过Nginx限制用户上传文件的MIME类型? 2. 在Kubernetes集群中如何实现安全的文件上传存储方案? 3. 如何配置Nginx自动重命名上传文件但保留扩展名? [^1]: 通过`nginx -t`验证配置语法后需执行`systemctl reload nginx`使配置生效 [^2]: PHP解析配置需要与上传模块配合使用,避免扩展名被错误处理 [^3]: 反向代理配置可能影响上传数据流向,需确保与上传模块无冲突
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值