我正在设置一个新的 Amazon Linux 2/PHP/NGINX 环境,但我对 Nginx 不太熟悉,因为我上一个 Elastic Beanstalk 环境是 Amazon Linux/PHP/Apache。(Amazon 将代理从 Apache 更改为 Nginx,底层平台从 Amazon Linux 升级到 AL2)
以前,我有一个 .htaccess 文件来处理多个域名,每个域名都有一个对应的文件夹,用于提供服务。但是,我知道 .htaccess 文件不适用于 Nginx。
到目前为止,我已经尝试将配置文件添加到 .ebextensions 文件夹,内容如下:
files:
"/etc/nginx/sites-available/example.com.conf":
mode: "000644"
owner: root
group: root
source: https://someothersite.com/example.com.conf
所引用的源(example.com.conf)包含以下内容:
server {
listen 80;
root /var/www/html/example.com;
index index.html index.php;
server_name example.com;
location / {
try_files $uri $uri/ =404;
}
}
我认为我需要创建一个符号链接,因此在 .ebextensions 文件夹中我有另一个包含以下内容的配置文件:
commands:
10_link:
command: sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
执行此 ln 命令后,我在构建过程中收到错误。如果我不执行该命令,则不会收到错误,但它不起作用(不会提供 example.com/test.php)
我最后一次尝试是在 .ebextensions 文件夹中不执行任何操作,而是创建了 .platform/nginx/conf.d/custom.conf,内容如下
server {
listen 80;
root /var/www/html/example.com;
index index.html index.php;
server_name example.com;
location / {
try_files $uri $uri/ =404;
}
}
这似乎更接近,因为 example.com/test.php 正在转到文件,但服务器却提示浏览器下载 php 文件。
答案1
为了测试目的,您只需在 /etc/nginx/sites-enabled 文件夹中创建文件即可
对于多个域名,您可以使用
服务器名称*.domain1.com custom.domain2.com;
最后,我们需要通过 FastCGI(您可以在 Ubuntu 上安装它
apt-get install php7.0-fpm
)接口到 PHP-FPM 处理所有 PHP 文件。server { listen 80; server_name mydomain.com; access_log /var/log/nginx/access.log combined; location / { root /var/www/html; try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { fastcgi_pass unix:/var/run/php7.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }