更新时间: 2018-01-11 21:09:21       分类: 运维实战


二级域名

举例 对于域名a.com 二级域名的格式为*.a.com (*可以是任何字符串)

nginx服务器

1.说明

nginx服务器使用虚拟主机的形式来配置服务器。每个域名都可以对应一台虚拟主机,这样就可以达到,对于同一个ip,不同的域名访问可以得到不同的网站

2.配置文件说明

首先是主配置文件 文件位置/etc/nginx/nginx.conf

此文件中是nginx的核心配置项(比如最大连接数等等),其实整个nginx的配置项都是通过这个文件确定的,其中的虚拟主机部分(即server)是在该文件中通过include实现的。

两个虚拟主机的配置目录,一个是sites-available 一个是sites-enabled ,两者内部都默认有一个default文件,是默认的虚拟主机配置,注意这两个文件其实就是一个文件,enabled中的default只是一个链接而已。所以在nginx.conf中,只是include了enabled目录里的所有文件,按照这个默认的逻辑,如果想要增加一个虚拟主机的配置,那么你应该单独写一个配置文件放在enabled目录下即可。

下面举例一个基本的server配置内容

server {
        listen 80 default_server; #监听80端口,为默认服务器
        listen [::]:80 default_server ipv6only=on;
        root /var/www/oj/NEUQ-OJ/public;
        index index.html index.htm index.nginx-debian.html index.php; #index文件类型,这个很重要,是实现伪静态的主要方法
        # Make site accessible from http://localhost/
        server_name localhost;
        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404; #找不到页面时尝试返回的内容
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }
        location ~ \.php$ {
        		#此处开始是php配置
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
                # With php5-cgi alone:
        #       fastcgi_pass 127.0.0.1:9000;
        #       # With php5-fpm:
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }
}

3.php配置和laravel部署

nginx和php的连接方式目前基本使用php-fpm,通过apt安装之后,就可以配置了

配置php

主要就是server里的这一部分了

        location ~ \.php$ {
        		#默认情况下这部分是被注释的,自己手动取消注释打开php配置
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
                # With php5-cgi alone:
        #       fastcgi_pass 127.0.0.1:9000;
        #       # With php5-fpm:
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }

你需要做的就是填写fastcgi_pass unix这个选项,填写fpm的所在位置即可,注意php7.0开始路径就更改了。(原来似乎是/var/run/php5/php-fpm.sock)

部署laravel

php配好了基本没啥问题,就是路由的方式有些不好办,这时候就需要配置好下面这两个配置项

location / {
                try_files $uri $uri/ /index.php?$query_string;
                #使用这个统配方式,就可以让匹配的url和laravel风格一致了(404没有了)
        }
index index.html index.htm index.nginx-debian.html index.php; 
#不加这个index.php也会导致路由不正常,原理很简单的,和apache的rewrite差不多

4.二级域名和多虚拟主机配置

我们已经知道一个server{}就是一台虚拟主机了,具体配置文件就是放在enabled目录下了(当然也可以自己指定,手动include就好了)

那么建立多个虚拟主机,就是建立多个配置文件,每个配置的root(文件根目录)和 sever_name(服务器域名) 不一样罢了

举例:我把oj和blog都放在一台服务器上,分别在enabled文件夹中创建oj.conf和blog.conf然后配置他们:

oj.conf中

server_name oj.marklux.cn
root /var/www/html/oj/public

blog.conf中

server_name www.marklux.cn marklux.cn
root /var/www/html/blog/public

这样做的效果就是访问oj.marklux.cn就是访问/var/www/html/oj/pulic这个目录下的脚本和资源,www.marklux.cn和marklux.cn同理。

所以你添加了两个conf文件,重启nginx服务然后发现fail了

这是因为默认配置文件和你的配置出现了冲突,我的做法是:

(1) 删除availabled里的default,删除enabled里的defualt(链接)

(2) 删除自定义server里面的 default_server(端口后面那句) 以及下面的 listen [::]:80 default_server ipv6only=on;

换句话说,把所有的默认选项全干掉了,完全自定义。这时候再重启服务就好了。

其他值得注意的地方:


评论

还没有评论