LNMP添加、删除虚拟主机及伪静态使用教程

作者:licess 发布时间:2013年04月16日 分类:常见问题

一般情况下每个虚拟主机就是一个网站,网站一般通过域名进行访问。
本文为教程适合LNMP 1.2+,各个版本的添加过程基本类似,按提示操作即可。1.4版+添加了SSL选项可以选择Letsencrypt和自备SSL证书,多PHP版本选择等功能。1.3版增加了FTP和数据库的创建等。LNMP 1.4+的防跨目录同时在网站根目录.user.ini和fastcgi.conf中进行管控,LNMP1.2的防跨目录在网站根目录下的.user.ini,1.1版在php.ini中;移除防跨目录设置方法
LNMP 1.1及之前的版本采用/root/vhost.sh 进行添加虚拟主机。

LNMP 1.2开始使用lnmp命令进行管理,具体可以参看更新记录
虚拟主机管理基本命令介绍:lnmp vhost {add|list|del}

之前版本的LNMP都可以升级到新版的lnmp管理脚本,升级到1.4教程

##添加网站(虚拟主机)##


如果输入有错误需要删除时,可以按住Ctrl再按Backspace键进行删除。

执行:lnmp vhost add 出现如下界面:

这里要输入要添加网站的主域名,我们以添加www.vpser.net域名为例,如上图提示后输入域名 www.vpser.net 回车后提示(这里只能输入一个主域名!!!)。

这里询问是否添加更多域名,直接再输入要绑定的域名,这里我们将 vpser.net 也绑上,多个域名空格隔开,如不需要绑其他域名就直接回车。

(注:带www和不带www的是不同的域名,如需带www和不带的www的域名都访问同一个网站需要同时都绑定)。

下面需要设置网站的目录

网站目录不存在的话会创建目录。也可以输入已经存在的目录或要设置的目录(注意如要输入必须是全路径即以/开头的完整路径!!!)。不输入直接回车的话,采用默认目录:/home/wwwroot/域名


伪静态可以使URL更加简洁也利于SEO,如程序支持并且需要设置伪静态的话,如启用输入 y ,不启用输入 n 回车(注意LNMPA或LAMP模式没有该选择项!)。

默认已经有了discuz、discuzx、discuzx2(Discuz X二级目录)、wordpress、wp2(WordPress二级目录)、typecho、typecho2(Typecho二级目录)、sablog、emlog、dabr、phpwind、、dedecms、drupal、ecshop、shopex等常用的Nginx伪静态配置文件,可以直接输入名称进行使用,如果网站是在二级目录则需要修改对应伪静态文件里的二级目录的名称。

lnmp-add-vhost-pathinfo.png
该提示为询问是否启用pathinfo,只有极少数程序使用pathinfo,如基于CI框架的程序。常见的wordpress、discuz x等都不需要开启!!!不需要pathinfo的网站程序开启pathinfo会访问出现各种问题。
默认回车不启用,启用请输入 y 后回车。


这一步是设置日志,如启用日志输入 y ,不启用输入 n 回车。

如果启用需要再输入要设置的日志的名称,默认日志目录为:/home/wwwlogs/ 默认文件名为:域名.log 回车确认后,会询问是否添加数据库和数据库用户。

如果需要添加数据库输入 y ,不添加数据库输入 n 回车。

如果要添加,需要先验证MySQL的root密码(注:输入密码将不显示)
提示Enter database name: 后输入要创建的数据库名称,要创建的数据库用户名会和数据库同名,回车确认。

提示Please enter password for mysql user 数据库名: 后输入要设置的密码,回车确认。

如果安装了FTP服务器会询问是否添加FTP账号

如果需要添加输入 y ,不添加输入 n 回车。

提示Enter ftp account name: 后输入要创建的FTP账号名称,回车确认。
提示Enter password for ftp account FTP账号: 后输入要设置的密码,回车确认。

接下来是1.4新增的添加SSL功能

如果需要添加输入 y ,不添加输入 n 回车。
选择了添加SSL会提示

有两个选项,1 选项为使用自己准备好的SSL证书和key。

> > 提示Please enter full path to SSL Certificate file 后输入要SSL证书的完整路径和文件名,回车确认。
> > 提示Please enter full path to SSL Certificate Key file: 后输入输入要key文件的完整路径和文件名,回车确认。
> > LAMP下会提示Please enter full path to SSL Chain file: 一般Apache2.2需要用到这个添加上证书链,2.4前面证书是补全证书链的话不用。

2 选项为使用免费SSL证书提供商Letsencrypt的证书,自动生成SSL证书等信息。
如果在前面步骤添加的 *.vpser.net 这样的泛域名是不能通过该方式生成SSL证书,泛域名必须要通过API方式添加SSL或自行购买泛域名SSL。

需要输入一个邮箱回车确认。

提示 Press any key to start create virtul host... 后,回车确认便会开始创建虚拟主机。

添加成功会提示添加的域名、目录、伪静态、日志、数据库、FTP等相关信息,如下图:


##伪静态管理##

LNMPA或LAMP可以直接使用网站根目录下放.htaccess 来设置伪静态规则(具体规则可以去程序官网网站找google百度),但是在LNMP下,需要使用Nginx伪静态规则。
伪静态可以随时添加或删除,如果添加完虚拟主机后忘记或没有添加伪静态,可以通过修改配置文件来添加伪静态。
虚拟主机配置文件在:/usr/local/nginx/conf/vhost/域名.conf

1.4及之前版本伪静态文件都在 /usr/local/nginx/conf/ 目录下
1.5及之后版本伪静态文件都在 /usr/local/nginx/conf/rewrite 目录下
lnmp安装后自带的伪静态文件名称后面带2的是二级目录的伪静态,可以根据自己需求修改里面二级目录的名称或复制为其他名字后include到虚拟主机配置文件中。
编辑虚拟主机配置文件,可以使用vinanowinscp,后2个工具对新手来说简单些。

例如前面我们lnmp vhost add添加的虚拟主机,打开后前半部分配置会显示如下:

在root /home/wwwroot/www.vpser.net;这一行下面添加:
include rewrite/wordpress.conf;
上面的rewrite/wordpress.conf为伪静态文件,如果之前lnmp vhost add时选择错误直接在原来基础上修改就可以。

如需要其他伪静态文件自己创建个 abc.conf 名字随意并上传到/usr/local/nginx/conf/rewrite 下面并include rewrite/abc.conf; 加完保存,执行:/etc/init.d/nginx restart 重启生效,如果报错可能是添加有误或伪静态规则有误。
1.4及之前版本为include 伪静态.conf;同样按前面步骤重启生效。

如果还没创建虚拟主机也可以文件自己创建个 abc.conf 的伪静态文件写好伪静态规则并上传到/usr/local/nginx/conf/rewrite 下,在lnmp vhost add 添加虚拟主机时可以直接在选择伪静态该步骤时直接输入abc即可选择使用自己上传的abc.conf 这个伪静态文件。


##上传网站程序##

如果已经安装FTP服务器可以直接使用ftp客户端通过你的FTP信息登录后上传网站或sftp等软件上传网站,设置好相关权限开始安装即可。
上传网站后建议执行:chown www:www -R /path/to/dir 对网站目录进行权限设置,/path/to/dir替换为你网站目录。
为了安全可以将一些不需要PHP运行的上传文件之类的目录去掉执行权限,参考:http://www.vpser.net/security/lnmp-remove-nginx-php-execute.html

##已存在虚拟主机添加ssl证书开启https##

对于已存在的虚拟主机添加https站点,可以执行:lnmp ssl add 命令添加ssl证书,目前有两种方式一种是使用自备的ssl证书,二是采用Let'sEncrypt的免费证书。添加过程和前面的添加虚拟主机的过程是一样的,只是会多一项填写ssl证书和key的步骤或直接选择Let'sEncrypt自动生成证书。
如果是1.*版本升级到1.4或更改版本的需要参考:https://lnmp.org/faq/upgrade1-4.html 中的说明.

如果访问https站点时提示不安全或不显示小绿锁的话一般有以下几个原因:
SSL证书可能到期;
网站代码里可能有http的资源如css、js、图片等;一般可以在Chrome浏览器里按F12快捷键,刷新,在Console选项下一般都会有提示。

##列出网站(虚拟主机)##

执行:lnmp vhost list


##删除网站(虚拟主机)##

执行:lnmp vhost del


删除网站会先列出当前已有虚拟主机,按提示输入要删除的虚拟主机域名 回车确认。

这里只是删除虚拟主机配置文件,网站文件并不会删除需要自己删除。
LNMP 1.2或更高版本下需要执行:chattr -i /网站目录/.user.ini 后才能完整删除网站目录。

当执行chown或chmod对网站目录属主属组或权限进行操作时可能会提示chown: changing ownership of `/home/wwwroot/default/.user.ini': Operation not permitted,不需要理会,如果有强迫症可以参考前面先进行chattr -i的操作。

##默认网站(虚拟主机)##

LNMP默认网站配置文件:/usr/local/nginx/conf/nginx.conf
LNMPA默认网站配置文件:/usr/local/nginx/conf/nginx.conf 和 /usr/local/apache/conf/extra/httpd-vhosts.conf
LAMP默认网站配置文件:/usr/local/apache/conf/extra/httpd-vhosts.conf

##防跨目录设置##

LNMP 1.1及之前的版本使用php.ini里面,open_basedir设置

LNMP 1.2及更高版本防跨目录功能使用.user.ini,该文件在网站根目录下,可以修改.user.ini 里面的open_basedir的值来设置限制访问的目录或删除来移除防跨目录的设置。

.user.ini文件无法直接修改,如要修或删除需要先执行:chattr -i /网站目录/.user.ini
可以使用winscp文件管理vim编辑器nano编辑器进行修改。
删除的话rm -f /网站目录/.user.ini 就可以。
修改完成后再执行:chattr +i /网站目录/.user.ini
.user.ini不需要重启一般5分钟左右生效,也可以重启一下php-fpm立即生效。
如果要更改网站目录必须要按上述方法修改防跨目录的设置,否则肯定报错!!

LNMP 1.4或更高版本如果不想用防跨目录除需要删除.user.ini的防跨目录的目录还需要将 /usr/local/nginx/conf/fastcgi.conf 里面的fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/"; 在该行行前添加 # 或删除改行,需要重启nginx。

LNMP 1.4或更高版本也可以直接使用lnmp安装包 tools/ 目录下的 ./remove_open_basedir_restriction.sh 进行移除,需要输入原网站目录完整路径(注意不是新的网站路径),回车即可。
在Thinkphp、codeigniter、Laravel等框架下,网站目录一般是在public下,但是public下的程序要跨目录调用public上级目录下的文件,因为LNMP默认是不允许跨目录访问的,所以都是必须要将防跨目录访问的设置去掉,有时候这些框架类的程序提示500错误也可能是这个问题引起的。


LNMPA或LAMP 模式1.2版本或更高版本的防跨目录的设置使用的对应apache虚拟主机配置文件(lnmp管理工具添加的话文件是 /usr/local/apache/conf/vhost/域名.conf )里的php_admin_value open_basedir参数进行设置。如果不需要防跨目录设置可以在 php_admin_value open_basedir 该行前面加 # 进行注释,或自行修改参数后面的目录。
重启apache生效。

##pathinfo设置##

LNMP上各个版本pathinfo各个版本的设置基本一样:

lnmp v1.1上,修改对应虚拟主机的配置文件(/usr/local/nginx/conf/vhost/域名.conf)
去掉#include pathinfo.conf前面的#,把try_files $uri =404; 前面加上# 注释掉。

1.2,1.3,1.4,1.5及以上版本,修改对应虚拟主机的配置文件(/usr/local/nginx/conf/vhost/域名.conf)
将include enable-php.conf;替换为include enable-php-pathinfo.conf;

1.4版本多PHP版本启用pathinfo的话,进入/usr/local/nginx/conf目录,拷贝一份enable-php-pathinfo.conf 命名为 enable-php7.2-pathinfo.conf,将 enable-php7.2.conf 文件里 fastcgi_pass这一行内容完整的复制下来替换 enable-php7.2-pathinfo.conf 文件中的 fastcgi_pass这一行 ,保存,再按前面的方法修改虚拟主机 include enable-php7.2-pathinfo.conf; 就行了,其他版本以此类推。

1.5版本多PHP版本开启pathinfo的话,可以在lnmp vhost add 是选择启用pathinfo,如果存在多PHP版本就会提示你选择,也可以直接修改虚拟主机配置文件将include enable-php.conf; 替换为 include enable-php7.2-pathinfo.conf; 保存

修改pathinfo需要重启nginx生效。

##数据库管理##

1.3以上版本,可以在添加虚拟主机时选择创建数据库,也可以单独使用 lnmp database add 按提示添加数据库,添加的用户名和数据库名是同名的。
添加数据库命令:lnmp database add
编辑数据库用户密码命令:lnmp database edit
删除数据库命令:lnmp database del
列出所有数据库命令:lnmp database list

标签: 虚拟主机, 伪静态, 添加虚拟主机, 删除虚拟主机, LNMP伪静态, pathinfo, lnmp pathinfo, 防跨目录

已有 34 条评论 »

  1. Press any key to start create virtul host...
    Create Virtul Host directory......
    set permissions of Virtual Host directory......
    You select the exist rewrite rule:/usr/local/nginx/conf/wordpress.conf
    Gracefully shutting down php-fpm . done
    Starting php-fpm

    卡着不动了,阿里云服务器,系统版本centos 6.3.
    [root@ppt vhost]# /etc/init.d/php-fpm restart
    Gracefully shutting down php-fpm . done
    Starting php-fpm done

    请指教!谢谢。

    1. 在某些系统下这个版本的php有问题,升级一下php版本

  2. 小小 小小

    你好 安装后 我添加域名并设置静态规则为wordpress 随后我在子目录h下安装了dedecms 后台打不开请问如何设置呢

    1. 需要在按教程include 一个二级目录的dede伪静态

  3. Lance Lance

    安装完毕之后,添加虚拟主机,绑定域名,结果发现绑定的域名无论如何都指向wwwroot而不指向我设定的目录,怎么办。。。

    1. 添加时报错,或这个域名已经帮到了/home/wwwroot 上,只有这2中可能。你自己检查一下配置文件看看

  4. 弄了两天,看了这个简单教程,才把WEB服务器配置成功,能不能再弄个PHPMYADMIN安装,方便管理

    1. phpmyadmin就是一个php的程序,只有找一个放网站目录就能用

  5. 飞梦园 飞梦园

    为什么我/etc/init.d/nginx restart这个操作完之后,VPS里的所有网站都上不了了,要怎样处理啊?求帮助,谢谢!

    1. nginx配置文件可能有错误

  6. yinet yinet

    之前在添加一个虚拟主机,如a.abc.com,网站目录为a.abc.com,现在想绑定一个新的域名123.com到a.abc.com,要如何设置?谢谢

    1. 编辑/usr/local/nginx/conf/vhost/域名.conf 按前面“三、伪静态”实例截图里的格式添加

  7. 一些框架的伪静态建议加上 如CI Symfony的

  8. .t .t

    怎样修改这个?/usr/local/nginx/conf/discuzx.conf 提示 Permission denied

    1. vi,nano,winscp都可以文中有提到

      1. .t .t

        感谢军歌回复啊。我用winscp了。 另外出了个问题:在浏览器输入: http://你的ip/ftp/ 及phpmyadmin 目录都访问不了?

        1. /usr/local/nginx/sbin/nginx -t测试配置看看,不能访问按常见问题里的看看

        2. .t .t

          /ftp 可以访问了。应该是配置conf文件时不会用nano的保存命令弄了好几个confyy结尾的配置引起的出错。另另外,验证码又只有图片没有里边的文字,囧

  9. hinetnet hinetnet

    我用新版本的安装后 为什么访问不了php的 默认的可以访问 但是新加的不可以访问

    1. 有错误信息不

  10. 是啊,原来一个页面就能找见所有的东西,现在还得找来找去

  11. ctrl+c 终止,然后/etc/init.d/php-fpm restart 看一下能正常重启服务不

    1. Dmoo Dmoo

      同上...

    2. aray aray

      和这位朋友同样问题

  12. ip直接指向default这个目录?

  13. 状态管理是最重要的命令不可能删,更没删

  14. 最后一个配图是不是有误啊?

    1. 感谢指正,已更新

  15. 军哥估计没考虑过面板 其实面板不面板也无所谓

    1. 没考虑过做面板

  16. ^ ^

    1.0更新了些什么

    1. ^ ^

      请问如何升级==

      1. 更新记录查看:http://lnmp.org/changelog.html

        如果原来版本用这没问题不需要升级

评论已关闭