使用 nginx 设置多站点
Setting up multisite with nginx
使用 nginx 设置以下设置时遇到一些问题:
- example.com
- 示例。com/gb/en
这些是 laravel 个站点,gb/en 是将添加的第一个站点。 Root 可以正常工作,但我无法让 /gb/en 指向 /gb/en/public 文件夹。
我已经尝试了很多东西,但这是我当前的配置文件:
server {
listen 80;
listen [::]:80;
server_name www.example.com;
root /home/forge/www.example.com/public;
ssl_protocols TLSv1.2;
ssl_ciphers TEST;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/dhparams.pem;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.html index.htm index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location /gb/en {
root /home/forge/www.example.com/gb/en/public;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
access_log off;
error_log /var/log/nginx/www.example.com-error.log error;
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
你可以在那里看到我的位置块,我已经尝试了多种不同的方法但无济于事。
如有任何帮助,我们将不胜感激。
编辑:
因此,一旦我意识到 url 中的子文件夹也被添加到根目录中,我就更近了一步:
location /gb/en/ {
root /home/forge/www.example.com/public;
try_files $uri $uri/ /public/index.php?url=$uri;
}
所以,我的文件在 /public/gb/en/public 下,但上面解析为 /public/gb/en/index.php
如何让 /gb/en/ 解析为 public/gb/en/public/index.php?
非常感谢 ;)
编辑:
我突然想到了这个主意——使用符号链接!我将 /gb/en 符号链接到单独文件夹中的 public 文件夹,效果不错 ;)
我建议将 try_files
行复制到 /en/gb
块中。在该文件夹或站点中,您没有像在有效的文件夹中那样指定要使用的扩展名。
试试这个:
location /gb/en {
root /home/forge/www.example.com/gb/en/public;
try_files $uri $uri/ /index.php?$query_string;
}
但是,如果 /en/gb
的内容与站点相关,直接在 Laravel 中设置可能是更好的选择。
最后我使用了符号链接来实现这一点。我将 /gb/en 符号链接到另一个位置的 public 文件夹,它完成了我想要的 ;)
编辑 - 后来我发现子页面也有问题,但后来找到了这个例子,它首先帮助实现了我想要的 https://gist.github.com/noeldiaz/08a1211a7c47f21f7083
使用 nginx 设置以下设置时遇到一些问题:
- example.com
- 示例。com/gb/en
这些是 laravel 个站点,gb/en 是将添加的第一个站点。 Root 可以正常工作,但我无法让 /gb/en 指向 /gb/en/public 文件夹。
我已经尝试了很多东西,但这是我当前的配置文件:
server {
listen 80;
listen [::]:80;
server_name www.example.com;
root /home/forge/www.example.com/public;
ssl_protocols TLSv1.2;
ssl_ciphers TEST;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/dhparams.pem;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.html index.htm index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location /gb/en {
root /home/forge/www.example.com/gb/en/public;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
access_log off;
error_log /var/log/nginx/www.example.com-error.log error;
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
你可以在那里看到我的位置块,我已经尝试了多种不同的方法但无济于事。
如有任何帮助,我们将不胜感激。
编辑:
因此,一旦我意识到 url 中的子文件夹也被添加到根目录中,我就更近了一步:
location /gb/en/ {
root /home/forge/www.example.com/public;
try_files $uri $uri/ /public/index.php?url=$uri;
}
所以,我的文件在 /public/gb/en/public 下,但上面解析为 /public/gb/en/index.php
如何让 /gb/en/ 解析为 public/gb/en/public/index.php?
非常感谢 ;)
编辑:
我突然想到了这个主意——使用符号链接!我将 /gb/en 符号链接到单独文件夹中的 public 文件夹,效果不错 ;)
我建议将 try_files
行复制到 /en/gb
块中。在该文件夹或站点中,您没有像在有效的文件夹中那样指定要使用的扩展名。
试试这个:
location /gb/en {
root /home/forge/www.example.com/gb/en/public;
try_files $uri $uri/ /index.php?$query_string;
}
但是,如果 /en/gb
的内容与站点相关,直接在 Laravel 中设置可能是更好的选择。
最后我使用了符号链接来实现这一点。我将 /gb/en 符号链接到另一个位置的 public 文件夹,它完成了我想要的 ;)
编辑 - 后来我发现子页面也有问题,但后来找到了这个例子,它首先帮助实现了我想要的 https://gist.github.com/noeldiaz/08a1211a7c47f21f7083