nginx配置只开放指定目录访问

本文介绍如何通过合理配置Nginx服务器,提升ThinkPHP5框架项目的安全性,包括单一入口文件、静态资源开放及404错误处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

众所周知tp5是单一入口文件, 项目只开放这个文件(可能还需要开放存放css,js,图片等静态资源目录)访问权限这样能提高项目的安全性.  假设有个tp项目, 入口文件index.php在根目录下, uploads目录存放图片静态资源也需要开放. 那么nginx配置如下供参考, 有更好的欢迎留言:

server {
        listen       80;
        server_name  www.test.com ;  #域名
        root   "/home/wwwroot/tp5"; #项目所在路径
   location / {
         #规则重写
         if (!-e $request_filename) {
            rewrite  ^/index.php(.*)$  /index.php?s=$1  last;
            rewrite  ^(.*)$  /index.php?s=$1  last;
            break;
         }

         #开放uploads目录
         location /uploads/ {
            break;
         }
         #开放favicon.ico图片文件, 该图片为显示在浏览tab栏上的网站logo
         location ~ ^/favicon.ico$ {
            break;
         }
         #只输入域名也能访问到默认的index.php,不至于被显示404
         location ~ ^/$ {
            break;
         }
         #访问以上情况之外的文件都显示404
         return 404;
    }

    #只有根目录下的index.php文件会被转发给php解析, 其他的php文件都无法直接执行, 提高了系统的安全性
    location ~ ^/index\.php$ {
      fastcgi_pass   127.0.0.1:9000;
      fastcgi_index  index.php;
      fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      fastcgi_param  PHP_VALUE        open_basedir=$document_root:/tmp/:/proc/;
      include        fastcgi_params;
    }
}

 

<think>我们正在配置Nginx以实现通过域名访问网站。根据引用内容,关键步骤是为每个域名创建独立的配置文件,并设置server_name和root目录。 引用[1]提到在Nginx配置目录(如/usr/local/nginx/conf/vhost/)下为每个域名创建配置文件,并监听80(HTTP)和443(HTTPS)端口。 引用[2]给出了一个简单的配置示例,其中设置了server_name(域名)和root(站点根目录)。 配置步骤: 1. 进入Nginx配置目录,通常主配置文件为nginx.conf,而为了管理多个域名,我们可以在vhost目录(如果没有则创建)下为每个域名创建单独的配置文件。 2. 创建域名的配置文件,例如:www.example.com.conf(将example.com替换为你的域名)。 3. 编辑该配置文件,设置server块,监听80端口(HTTP)和443端口(HTTPS,如果需要SSL则配置),并指定server_name和root。 4. 保存配置文件,并测试Nginx配置是否正确,然后重新加载Nginx。 下面是一个基本的配置示例(仅HTTP,80端口): ``` server { listen 80; server_name www.example.com; # 替换为你的域名 root /var/www/html/example; # 替换为你的网站根目录 index index.html index.htm; # 其他配置,如错误页面、日志等 } ``` 如果需要配置HTTPS,则需要监听443端口,并配置SSL证书和密钥的路径: ``` server { listen 443 ssl; server_name www.example.com; root /var/www/html/example; index index.html index.htm; ssl_certificate /path/to/your/certificate.crt; ssl_certificate_key /path/to/your/private.key; # 其他SSL配置... } ``` 注意:配置完成后,需要确保域名已经解析到服务器的IP地址。 操作步骤: 1. 创建配置文件:在vhost目录下创建新配置文件(如:/usr/local/nginx/conf/vhost/www.example.com.conf),并写入上述配置(根据需求选择HTTP或HTTPS配置)。 2. 检查配置文件语法:执行 `nginx -t` 命令,确保没有错误。 3. 重新加载Nginx:执行 `nginx -s reload` 使配置生效。 如果还没有配置SSL证书,可以使用Let's Encrypt等免费证书,或者先配置HTTP,后续再配置HTTPS。 另外,为了确保HTTP请求自动跳转到HTTPS,可以添加一个80端口的server块进行重定向: ``` server { listen 80; server_name www.example.com; return 301 https://$host$request_uri; } ``` 这样,当用户访问http://www.example.com时,会自动跳转到https://www.example.com。 注意:配置文件的路径可能因安装方式不同而有所差异,请根据实际情况调整。 §§相关问题§§ 1. 如何为Nginx配置SSL证书以实现HTTPS访问? 2. Nginx配置中如何设置多个域名指向不同的目录? 3. Nginx配置完成后如何测试和重载配置? 4. 如何配置Nginx的HTTP重定向到HTTPS? 5. 如何解决Nginx配置中出现的常见错误?</think>### 配置Nginx通过域名访问站点的步骤 以下是配置Nginx实现域名访问的核心步骤(假设已拥有域名和服务器): 1. **创建站点目录** 在服务器创建网站文件存放目录(替换`your_domain`为实际域名): ```bash sudo mkdir -p /var/www/your_domain/html ``` 2. **新建Nginx配置文件** 在Nginx配置目录(通常为`/etc/nginx/sites-available/`)创建配置文件: ```bash sudo nano /etc/nginx/sites-available/your_domain.conf ``` 3. **写入基础配置** 添加以下内容(替换`your_domain`和目录路径): ```nginx server { listen 80; listen [::]:80; # 支持IPv6 server_name your_domain www.your_domain; # 绑定的域名 root /var/www/your_domain/html; # 网站文件路径 index index.html index.htm; # 默认首页文件 location / { try_files $uri $uri/ =404; # 文件查找规则 } } ``` 4. **启用配置并重载** ```bash # 创建符号链接到启用目录 sudo ln -s /etc/nginx/sites-available/your_domain.conf /etc/nginx/sites-enabled/ # 测试配置语法 sudo nginx -t # 重载Nginx生效 sudo systemctl reload nginx ``` 5. **域名解析设置** 在域名注册商处添加A记录: ``` 记录类型:A 主机名:@ 或 www 值:服务器IP地址 ``` 6. **验证访问** 在网站目录创建测试文件: ```bash echo "Hello World" > /var/www/your_domain/html/index.html ``` 浏览器访问 `http://your_domain` 应显示内容 --- ### 关键配置说明 1. **`server_name`** 指定响应的域名,支持多个域名空格分隔,例如: ```nginx server_name example.com www.example.com shop.example.com; ``` 2. **多站点配置** 重复上述步骤创建多个`.conf`文件,每个文件对应不同域名和目录: ```nginx # 站点1 server { server_name a.com; root /var/www/a.com; ... } # 站点2 server { server_name b.com; root /var/www/b.com; ... } ``` 3. **HTTPS扩展** 需额外配置SSL证书和443端口监听(参考相关问题1) > ⚠️ **注意事项** > - 确保服务器防火墙开放80端口 > - 域名解析生效通常需要5-30分钟 > - 使用`nginx -t`测试配置后再重载[^1][^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值