Write the Code. Change the World.

8月 13

通常,域名访问的网站都是外网的。有时候为了方便,使用域名访问本地文件也有必要。要实现这个,做到以下两步即可。

  1. 写host。

  2. 修改服务器配置。这里用的是 nginx

  3. 如果想要使用 https 访问,还需要制作 ssl 证书。

但在 mac 下,要实现这个,必须先实现端口的转发。也就是mac限制root权限才可以访问1024以下端口。所以,你想访问80端口,443端口是不现实的。这个时候,就需要用到 pfctl 转发。

https://blog.vini123.com/166

实现了转发,就继续下边的过程了。

修改host

mac下,host的位置是 /private/etc/hosts 。这里以 mlxiu.com这个域名为列。

sudo vi /private/etc/hosts 
# 追加以下内容
127.0.0.1 www.mlxiu.com
127.0.0.1 mlxiu.com

保存修改。

制作ssl证书

免费的ssl证书运营商还是很多的,入口在那里呢。七牛云存储后台有入口,阿里云后台也有入口。当然,你也可以自己手动创建。

修改 nginx.conf

mac 默认的 nginx.conf 的位置:/usr/local/etc/nginx/nginx.conf

当一个 nginx.conf 配置多个站点时,阅读起立不方便。这个时候,可以一个站点一个conf文件,众多conf文件,都放在一个指定的文件夹下。然后通过nginx.conf入口去调用。

修改 nginx.conf ,如下:

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process. 
#worker_rlimit_nofile 65535;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #charset  gb2312;

    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 88m;

    sendfile on;
    tcp_nopush     on;

    keepalive_timeout 60;

    tcp_nodelay on;

    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;

    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types       text/plain application/x-javascript text/css application/xml;
    gzip_vary on;
    #limit_zone  crawler  $binary_remote_addr  10m;
    log_format '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';
    include /usr/local/etc/nginx/vhosts/*.conf;
}

这里,配置文件都放在 /usr/local/etc/nginx/vhosts/ 目录下,后缀名为.conf。其实一切皆文件,后缀名只是区分而已。

既然,这里想要使用的域名是 mlxiu.com,配置文件就叫 mlxiu.com.conf

cd /usr/local/etc/nginx/
sudo mkdir vhosts
sudo vi mlxiu.com.conf
i

配置如下:

server 
{
    listen 8080;
    server_name  mlxiu.com www.mlxiu.com; 
    return 301 https://www.mlxiu.com$request_uri;
}

server 
{
    listen 8443 ssl; 
    server_name  mlxiu.com www.mlxiu.com;    

    if ( $host = 'mlxiu.com' ){
        return 301 https://www.mlxiu.com$request_uri;
    }           

    ssl_certificate         /usr/local/etc/nginx/ssl/mlxiu.com.pem;
    ssl_certificate_key     /usr/local/etc/nginx/ssl/mlxiu.com.key;

    charset utf-8;
    index index.php index.html index.htm;
    root /usr/local/var/www/mlxiu/;

    location / {
        try_files $uri $uri/  /index.php?$query_string; 
    }

    location ~ \.php($|/) {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param HTTPS $https if_not_empty;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires 30d;
    }

    location ~ .*\.(js|css)?$
    {
        expires 1h;
    }
#   access_log  /usr/local/var/log/nginx/mlxiu.com.log;
}

这里需要注意两点:

  1. 转发实现。80转发成8080,443转发成8443
  2. ssl证书放到对应目录下。

测试

重启nginx

sudo nginx -s quit
sudo nginx

然后,访问 http://www.mlxiu.com 进行测试了,当然你也可以配置成 www.yy.com

效果如图。

发表评论

电子邮件地址不会被公开。 必填项已用*标注