1、原由
只有一个域名,以前用php编写的网页又不能放弃,考虑将其移至二级目录下,例如:
https://abc.com/html
2、运行环境
Linux服务器上,用docker容器。Nginx和php-fpm各自运行在不同的容器中,Nginx在前端负责接收http请求,将其分发到后面不同的服务容器中。收到PHP网页请求就交给php-fpm解析,php-fpm的端口是9000。
3、Nginx配置
3.1 如果使用根目录
如果php网页在根目录下就比较简单,用下面配置即可:
server {
listen 80;
server_name abc.com;
root /usr/share/nginx/html;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
location ~ \.php(.*)$ {
root /var/www/html/phpmy;
fastcgi_pass 172.17.0.1:9000; #php容器的IP地址
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}
}
3.2 将php网页放在二级目录
将3.1的方法直接移植过来是行不通的,先放结果,正确的配置文件如下:
location /html {
alias /var/www/html/; #PHP文件在php-fpm容器中的目录
index index.php index.htm index.html;
try_files $uri $uri/ /html/index.php?$query_string;
if (!-e $request_filename) {
rewrite ^/html/(.*)$ /html/index.php?$1 last;
break;
}
location ~ \.php(.*)$ {
fastcgi_pass 172.17.0.1:9000; # PHP容器的IP地址
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
}
location ~* \.(htm|html|jpg|jpeg|png|gif|ico|js|css|map)$ {
root /usr/share/nginx/; # 静态文件目录比真实目录少一级,访问时会自动加上url的子目录
}
}
与在根目录下的情况不同,传给 location /html的目录是PHP文件在php-fpm容器中的目录。php-fpm接收的SCRIPT_FILENAME是 $request_filename文章来源:https://www.toymoban.com/news/detail-615095.html
- 下面一段是解决页面跳转后不能正确定位问题:
if (!-e $request_filename) {
rewrite ^/html/(.*)$ /html/index.php?$1 last;
break;
}
- 这个location是解决非php文件不能访问的问题:
location ~* \.(htm|html|jpg|jpeg|png|gif|ico|js|css|map)$ {
root /usr/share/nginx/; # 静态文件目录比真实目录少一级,访问时会自动加上url的子目录
}
目前这个配置文件还是有一些问题,比如直接访问目录时不能直接跳到index.php文件,访问时必须这样:文章来源地址https://www.toymoban.com/news/detail-615095.html
https://abc.com/html/index.php
到了这里,关于好大一个坑:在Nginx上将PHP网页放在二级目录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!