Nginx常见问题 - 02

本文详细介绍了Nginx服务器的几种关键配置技巧,包括server优先级解析、禁止IP访问、try_files路径匹配策略以及优雅地自定义错误页面显示。通过这些配置,可以提升网站的安全性和用户体验。

Nginx常见问题

一、server优先级 --回顾
1.首先选择所有的字符串完全匹配的server_name。(完全匹配)
2.选择通配符在前面的server_name,如mm.xin.com mm.xin
3.选择通配符在后面的server_name,如mm.xin.com driverzeng.cn
4.最后选择使用正则表达式匹配的server_name
5.如果全部都没有匹配到,那么将选择在listen配置项后加入[default_server]的server块
6.如果没写,那么就找到匹配listen端口的第一个Server块的配置文件
二、禁止IP访问
当用户通过访问IP或者未知域名访问你得网站的时候,你希望禁止显示任何有效内容,可以给他返回500,目前国内很多机房都要求网站关闭空主机头,防止未备案的域名指向过来造成麻烦
[root@wb01 conf.d]# cat server4.conf 
server {
    listen 80 default_server;           #默认优先返回;
    server_name _;                      #空主机头或者IP;
    return 500;                         #直接返回500错误;
}
三、Nginx try_file路径匹配
nginx的try_file路径匹配,Nginx会按顺序检查文件及目录是否存在(根据 root 和 alias 指令设置的参数构造完整的文件路径),并用找到的第一个文件提供服务。在元素名后面添加斜杠 / 表示这个是目录。如果文件和目录都不存在,Nginx会执行内部重定向,跳转到命令的最后一个 uri 参数定义的 URI 中。
1.正常的配置文件
[root@web01 conf.d]# vim linux12.try.com.conf 
server {
    listen 80;
    server_name linux12.try.com;

    location / {
        root /mm;
        index index.html; #默认是这个
    }
}


[root@web01 conf.d]# echo "test try_file" > /mm/index.html

# 授权: chown -R www.www /mm/
## 检查nginx -t 并重启

[root@web01 conf.d]# systemctl restart nginx

本地hosts访问  10.10.0.7 linux12.try.com
2.使用try_file的配置
## 保证/mm/目录必须有8.png的图片文件 且权限www

[root@web01 conf.d]# vim linux12.try.com.conf 
server {
    listen 80;
    server_name linux12.try.com;

    location / {
        root /mm;
        try_files $uri /8.png;
    }
}

#访问测试:

1.访问域名时 linux12.try.com,返回的结果是 8.png
由于请求的是域名,后面没有 uri,那么 $uri 匹配到的就是 "空",匹配不到内容的情况下,返回 8.png

2.访问域名 linux12.try.com/index.html,返回的结果是 index.html
由于请求的是linux12.try.com/index.html,$uri 匹配到的是 index.html,就返回相应内容
3.修改try_file配置
[root@web01 conf.d]# vim linux12.try.com.conf 
server {
    listen 80;
    server_name linux12.try.com;

    location / {
        root /mm;
        try_files $uri $uri/ /8.png #空2格
    }
}

#访问测试:

1.访问域名 linux12.try.com,返回的结果是 index.html
由于请求的是域名,后面没有 uri,那么 $uri 匹配到的就是 "空",$uri 匹配不到内容的情况下,匹配 $uri/,匹配到的是 "空/",/ 配置的是 /mm,那么就回去请求mm目录下的 index.html
4.一般使用场景
1、配置nginx
[root@l web03 conf.d]# vim linux12.try.com.conf    #先安装comcat
server {
    listen 80;
    server_name linux12.try.com;
    root /mm;

    location / {
        try_files $uri $uri/ @java;           #当$uri和$uri/都匹配不到时,由后端的java来进行处理,名字可自定义,但一定要加@
    }

    location @java {
    	proxy_pass http://172.16.1.8:8080;          #配置后端tomcat
    }
}
2、安装tomcat
[root@web03~]# yum install -y tomcat
[root@web03 ~]# cd /usr/share/tomcat/webapps/
[root@web03 webapps]# mkdir ROOT
[root@web03 webapps]# echo "test try_file @java" > ROOT/index.html
3、测试
[root@web03 ~]# systemctl restart tomcat

本地hosts访问  10.10.0.9 linux12.try.com

1.mm目录下游index.html的情况,访问域名正常显示 index.html
2.把mm目录改名,访问域名,返回的时tomcat下面配置的页面
四、Nginx优雅显示错误页面
1.跳转到网络
[root@web01 conf.d]# vi linux12.error.com.conf 
server {
    listen       80;
    server_name  linux12.error.com;

    location / {
        root /mm;
        index index.html;
        error_page 404 http://www.baidu.com;
    }
}

[root@web01 conf.d]# echo "error" > /mm/index.html

# 授权: chown -R www.www /mm/
## 检查nginx -t 并重启

[root@web01 conf.d]# systemctl restart nginx

本地hosts访问  10.10.0.7 linux12.error.com


## 成功就自动跳转的index.html    如果错误跳转到百度
2.跳转到本地文件
[root@web01 conf.d]# vim linux12.error.com.conf 
server {
    listen       80;
    server_name  linux12.error.com;

    location / {
        root /mm;
        index index.html;
        error_page 404 /8.png;
    }
}

# 输入这个  http://linux12.error.com/sssssss 错误  自动跳转8.png

## 成功就自动跳转的index.html    如果错误跳转到本地8.png
3.访问php找不到文件时错误页面跳转
[root@web01 conf.d]# vim linux12.error.com.conf 
server {
    listen       80;
    server_name  linux12.error.com;
    root /mm;
    index index.php;
    error_page 404 /404.jpg;

    location ~* \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        if (!-e $request_filename) {  #条件为真则执行下面,‘请求的文件不存在’    -e:等于 !=取反.
            rewrite (.*) http://linux12.error.com/8.png;
        }
    }
}
<think>好的,我需要帮助用户安装和配置Nginxnginx-upload-module模块。首先,我应该回顾用户提供的引用内容,看看是否有相关的步骤或注意事项。引用[1]提到了nginx-upload-module的项目地址,用户需要从这里获取模块源码。引用[2]和[3]涉及到fastdfs-nginx-module的安装和Nginx的配置,可能有一些相似之处,但需要专注于nginx-upload-module。 首先,安装模块通常需要重新编译Nginx,因为模块是作为动态或静态模块添加的。用户可能已经安装了Nginx,但需要确认是否支持动态模块添加,或者是否需要从源码重新编译。根据引用[3]中的描述,用户之前可能通过apt-get安装了Nginx,但添加模块可能需要源码编译。 接下来,步骤应该包括下载模块源码,获取Nginx源码,配置编译参数,添加模块路径,然后编译和安装。在配置过程中,用户需要指定模块的路径,如使用--add-module=/path/to/nginx-upload-module。需要提醒用户备份原有配置,避免覆盖问题。 另外,用户可能遇到端口冲突或配置错误,如引用[3]中提到的8888端口问题和多个Nginx实例的情况。需要指导用户正确停止旧服务,卸载旧版本,或者确保编译后的Nginx正确替换原有安装。 配置文件中,用户需要按照模块文档设置上传目录、大小限制等参数。可能需要编辑nginx.conf或特定server块,添加upload指令。测试配置后,重新加载Nginx服务使更改生效。 注意事项部分要强调源码编译的风险,备份的重要性,以及防火墙和权限的问题。如果用户遇到问题,建议查看日志或参考项目文档。 最后,生成的相关问题需要围绕常见问题、其他模块集成、安全设置和替代方案展开,帮助用户进一步探索。</think>### 安装和配置 Nginxnginx-upload-module 模块 #### 一、安装步骤 1. **下载模块源码** 从项目仓库克隆或下载源码(项目地址:[https://gitcode.com/gh_mirrors/ng/nginx-upload-module](https://gitcode.com/gh_mirrors/ng/nginx-upload-module)): ```bash git clone https://gitcode.com/gh_mirrors/ng/nginx-upload-module.git ``` 2. **获取 Nginx 源码** 如果已通过包管理器(如 `apt-get`)安装过 Nginx,需先卸载并下载对应版本的源码: ```bash # 卸载旧版本(保留配置文件) sudo apt-get remove nginx nginx-common # 下载源码(以 1.18.0 为例) wget http://nginx.org/download/nginx-1.18.0.tar.gz tar -zxvf nginx-1.18.0.tar.gz ``` 3. **编译安装** 进入 Nginx 源码目录,添加模块路径并编译: ```bash cd nginx-1.18.0 ./configure --add-module=/path/to/nginx-upload-module make sudo make install ``` > 注意:若之前已安装其他模块(如 `fastdfs-nginx-module`),需一并添加到 `./configure` 参数中[^3]。 4. **验证安装** 检查 Nginx 版本信息是否包含模块: ```bash nginx -V 2>&1 | grep upload-module ``` #### 二、配置模块 1. **修改 Nginx 配置** 在 `nginx.conf` 或站点配置文件中添加以下内容: ```nginx server { listen 80; server_name example.com; # 定义上传目录和参数 upload_pass /upload_endpoint; upload_store /var/uploads; upload_max_file_size 100m; upload_set_form_field $upload_field_name.name "$upload_file_name"; upload_set_form_field $upload_field_name.path "$upload_tmp_path"; } ``` 2. **创建上传目录并设置权限** ```bash sudo mkdir -p /var/uploads sudo chown -R www-data:www-data /var/uploads ``` 3. **重启 Nginx** ```bash sudo nginx -t # 测试配置 sudo systemctl restart nginx ``` #### 三、注意事项 1. **兼容性问题** 需确保模块版本与 Nginx 版本兼容。若编译报错,可尝试切换分支或调整源码。 2. **动态模块加载** 若需动态加载模块,需使用 `--add-dynamic-module` 参数编译,并在配置中添加 `load_module` 指令[^2]。 3. **端口冲突** 若出现端口占用问题,检查 `netstat -tulnp | grep :80` 并终止冲突进程。 ####
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FikL919

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值