前提条件
- 已安装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; # 错误日志路径
}