前提条件

  • 已安装Nginx。
  • 已安装PHP和对应的PHP-FPM。
  • Java正在运行并监你配置的端口。

目标

  • 配置Nginx以为PHP网站提供服务。
  • 为特定路径(例如:/local/api//third-party/api/)配置代理转发到Java应用。

步骤

1. 设置基本信息

首先,我们需要配置Nginx监听的端口和服务器名称。

server {
    listen 80; # 监听80端口
    listen 443 ssl http2; # 监听443端口,并启用SSL和HTTP/2
    server_name api.songzixian.com; # 服务器名称
}

2. 定义根目录和默认文档

这是定义网站的基础文件夹和当访问目录时默认加载的文件。

    root /www/wwwroot/api.songzixian.com/; # 网站根目录
    index index.php index.html index.htm; # 默认文档

3. SSL配置

为了确保安全传输,配置SSL证书和相关设置。

    # SSL配置部分
    ssl_certificate /www/server/panel/vhost/cert/api.open.songzixian.com/fullchain.pem; # SSL证书路径
    ssl_certificate_key /www/server/panel/vhost/cert/api.open.songzixian.com/privkey.pem; # SSL证书密钥路径
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; # 启用的TLS协议
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; # SSL加密套件
    ssl_prefer_server_ciphers on; # 优先使用服务器的加密套件
    ssl_session_cache shared:SSL:10m; # SSL会话缓存
    ssl_session_timeout 10m; # SSL会话超时时间
    add_header Strict-Transport-Security "max-age=31536000"; # 启用HSTS
    error_page 497  https://$host$request_uri; # 错误页面重定向

4. 配置PHP应用

设置Nginx以处理PHP文件,并定义根路径。

    # 根路径
    location / {
        try_files $uri $uri/ /index.php?$args; # 尝试匹配文件,目录,或转发至index.php
    }

    # PHP文件处理
    location ~ \.php$ {
        include enable-php-80.conf; # PHP-FPM配置
    }

5. 配置Java应用代理

为Java应用设置代理规则,将请求转发至Java应用。

    # Java应用的代理配置
    location ~ ^/(local/api|third-party/api)/ {
        proxy_set_header Host $http_host; # 代理设置:主机头
        proxy_set_header X-Real-IP $remote_addr; # 代理设置:真实IP
        proxy_set_header REMOTE-HOST $remote_addr; # 代理设置:远程主机
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 代理设置:X-Forwarded-For头
        proxy_pass http://localhost:8288; # 代理转发地址
        proxy_buffer_size 128k; # 代理缓冲区大小
        proxy_buffers 4 256k; # 缓冲区数量和大小
        proxy_busy_buffers_size 256k; # 代理忙碌缓冲区大小
        proxy_temp_file_write_size 256k; # 代理临时文件写大小
    }

6. 日志设置

为了诊断问题和监控访问,设置访问日志和错误日志。

    access_log /www/wwwlogs/api.open.songzixian.com.log; # 访问日志路径
    error_log /www/wwwlogs/api.open.songzixian.com.error.log; # 错误日志路径

完整配置

上述步骤会产生以下完整的Nginx配置:

server {
    listen 80; # 监听80端口
    listen 443 ssl http2; # 监听443端口,并启用SSL和HTTP/2
    server_name api.songzixian.com; # 服务器名称
    
    root /www/wwwroot/api.songzixian.com/; # 网站根目录
    index index.php index.html index.htm; # 默认文档

    charset utf-8; # 字符集
    client_max_body_size 10M; # 客户端最大请求体大小

    # SSL配置部分
    ssl_certificate /www/server/panel/vhost/cert/api.open.songzixian.com/fullchain.pem; # SSL证书路径
    ssl_certificate_key /www/server/panel/vhost/cert/api.open.songzixian.com/privkey.pem; # SSL证书密钥路径
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; # 启用的TLS协议
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; # SSL加密套件
    ssl_prefer_server_ciphers on; # 优先使用服务器的加密套件
    ssl_session_cache shared:SSL:10m; # SSL会话缓存
    ssl_session_timeout 10m; # SSL会话超时时间
    add_header Strict-Transport-Security "max-age=31536000"; # 启用HSTS
    error_page 497  https://$host$request_uri; # 错误页面重定向

    # 非HTTPS请求重定向至HTTPS
    if ($server_port !~ 443) {
        rewrite ^(/.*)$ https://$host$1 permanent;
    }

    # 根路径
    location / {
        try_files $uri $uri/ /index.php?$args; # 尝试匹配文件,目录,或转发至index.php
    }

    # PHP文件处理
    location ~ \.php$ {
        include enable-php-80.conf; # PHP-FPM配置
    }

    # Java应用的代理配置
    location ~ ^/(local/api|third-party/api)/ {
        proxy_set_header Host $http_host; # 代理设置:主机头
        proxy_set_header X-Real-IP $remote_addr; # 代理设置:真实IP
        proxy_set_header REMOTE-HOST $remote_addr; # 代理设置:远程主机
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 代理设置:X-Forwarded-For头
        proxy_pass http://localhost:8288; # 代理转发地址
        proxy_buffer_size 128k; # 代理缓冲区大小
        proxy_buffers 4 256k; # 缓冲区数量和大小
        proxy_busy_buffers_size 256k; # 代理忙碌缓冲区大小
        proxy_temp_file_write_size 256k; # 代理临时文件写大小
    }

    # ... 其他的location块和配置 ...

    access_log /www/wwwlogs/api.open.songzixian.com.log; # 访问日志路径
    error_log /www/wwwlogs/api.open.songzixian.com.error.log; # 错误日志路径
}
Last modification:December 9, 2023
如果觉得这篇技术文章对你有用,请随意赞赏