目录

使用Nginx部署PHP项目

一、基础配置

下面配置设计几个方面

1 http重定向到https

2 feixc.com重定向到www.feixc.com

3 配置ssl证书,证书申请超级简单acme证书申请,不用dns配置,自动续期,个人网站首选-CSDN博客

4 静态文件location配置

5 php文件解析配置

server {
    listen 80;
    server_name feixc.com www.feixc.com;
    rewrite ^(.*)$ https://www.feixc.com$1 permanent;
}
server {
    listen       443 ssl;
    server_name feixc.com www.feixc.com;
    ssl_certificate      /usr/local/nginx/certs/www.feixc.com.pem;
    ssl_certificate_key  /usr/local/nginx/certs/www.feixc.com.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    client_max_body_size 20m;
    client_body_buffer_size 128k;

    gzip on;
    gzip_buffers 32 4K;
    gzip_comp_level 6;
    gzip_min_length 100;
    gzip_types application/javascript text/css text/xml application/font-woff;
    gzip_disable "MSIE [1-6]\.";

    if ( $host = 'feixc.com') {
        rewrite ^/(.*)$ https://www.feixc.com/$1 permanent;
        return 301;
    }
    location ^~ /.well-known/acme-challenge/ {
        default_type "text/plain";
        root  /usr/local/www;
    }
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf|swf|woff2|woff|ttf|svg)$ {
        root /usr/local/www/feixc;
        index index.html index.php;
    }
    location ~ \.php$ {
        include       fastcgi_params;
        fastcgi_pass  127.0.0.1:9400;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME /www/feixc/$fastcgi_script_name;
    }
}

二、配置路由解析

由于nginx不同于apache,不能像apache解析.htaccess,所以我的配置还是传统的nginx配置

# 防止直接访问敏感文件
location ~* \.(sql|log)$ {
    deny all;
}


# URL重写规则


# 处理资源详情页 - 新格式: /资源类型/detail/id
location ~ ^/article/detail/([0-9]+)/?$ {
    try_files $uri /blog.php?id=$1&type=article;
}


location ~ ^/(code|plugin|software|tutorial|sucai)/detail/([0-9]+)/?$ {
    try_files $uri /resource.php?id=$2&type=$1;
}


# 处理资源类型路由 - 统一处理所有资源类型的复杂路由
# 支持格式: /资源类型/category-分类id-属性别名-属性值-属性别名-属性值-page-页码
location ~ ^/(code|plugin|software|tutorial|sucai|article)/?(.*)$ {
    try_files $uri /resources.php?type=$1&route_path=$2;
}


location ~ ^/website/?(.*)$ {
    try_files $uri /websites.php?type=website&route_path=$1;
}


# 处理搜索页面
location = /search {
    try_files $uri /search.php;
}


# 处理搜索路由 - 格式: /search/keyword-关键词-page-页码
location ~ ^/search/keyword-(.+?)-page-([0-9]+)/?$ {
    try_files $uri /search.php?q=$1&page=$2;
}


# 处理搜索路由 - 格式: /search/keyword-关键词
location ~ ^/search/keyword-(.+)/?$ {
    try_files $uri /search.php?q=$1;
}


# 处理旧格式的资源详情页(保持兼容性)
location ~ ^/resource/([0-9]+)/?$ {
    try_files $uri /resource.php?id=$1;
}


# 处理用户相关页面
location ~ ^/user/(dashboard|profile)/?$ {
    try_files $uri /user/$1.php;
}


# 处理认证相关页面
location ~ ^/(login|register|logout)/?$ {
    try_files $uri /auth/$1.php;
}


# 处理上传页面
location = /upload {
    try_files $uri /upload.php;
}
location = /admin {
    try_files $uri /admin/index.php;
}