nginx的域名解析入门到精通

242 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 9 天,点击查看活动详情

nginx的基础使用

nginx的目录

目录主要是一下几个目录,分别是:

html 目录 里边存放的是index.html 默认的首页

log目录

access.log 存放正确的日志,不过这个日志不能够一直存放不受到限制。

error.log 存放错误日志

xxx.pid 这个表示的是当前nginx主进程的进程id

conf目录

最重要的是nginx.conf,不过里边有其他的conf文件,但是那些文件起不到相对应的作用只能够用来给nginx.conf进行调用的。其实重要的文件是nginx.conf。

linux一般是把程序安装在 usr/local 里边。

nginx的最小配置

nginx各个配置的意思是什么呢,如下代码区表示nginx配置文件的意思:

user  www www;  #当前用户
worker_processes auto;#nginx有主进程,同时也有子进程,这个表示的是子进程没有限制。
error_log  /www/wwwlogs/nginx_error.log  crit;
pid        /www/server/nginx/logs/nginx.pid;


stream {
    log_format tcp_format '$time_local|$remote_addr|$protocol|$status|$bytes_sent|$bytes_received|$session_time|$upstream_addr|$upstream_bytes_sent|$upstream_bytes_received|$upstream_connect_time';
  
    access_log /www/wwwlogs/tcp-access.log tcp_format;
    error_log /www/wwwlogs/tcp-error.log;
    include /www/server/panel/vhost/nginx/tcp/*.conf;
}

events
    {
        use epoll;
        worker_connections 51200;
        multi_accept on;
    }

http
    {
        include       mime.types; #服务器给浏览器传输的数据时,浏览器的解读类型
		#include luawaf.conf; #include是引入某一个文件的意思

		include proxy.conf;

        default_type  application/octet-stream;#默认是流的类型返回给客户端

        server_names_hash_bucket_size 512;
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;
        client_max_body_size 50m;

        sendfile   on;#开启的话,是减少nginx一次资源的复制。如果sendfile关闭的话,客户端请求服务器上的某一个资源,nginx会在服务器的本地拿到这个资源,并且复制到nginx的应用程序里边,然后再给网络接口返回给客户端。如果开启sendfile就是nginx从服务器上拿个资源以后,给网络接口发一个信号,这信号就是sendfile,网络接口就去读取资源直接返回给客户端。这个中间省略的部分是,nginx并不需要将资源读取到自己的应用程序里边。
        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 256k;
		fastcgi_intercept_errors on;

        gzip on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.1;
        gzip_comp_level 2;
        gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
        gzip_vary on;
        gzip_proxied   expired no-cache no-store private auth;
        gzip_disable   "MSIE [1-6].";

        limit_conn_zone $binary_remote_addr zone=perip:10m;
		limit_conn_zone $server_name zone=perserver:10m;

        server_tokens off;
        access_log off;

server #表示一个主机,可以有多个主机,是虚拟主机。以端口来区分,端口不同则主机不同。主机有自己的域名。
    {
        listen 888; #端口号
        server_name phpmyadmin;#域名名称 
        index index.html index.htm index.php;
        root  /www/server/phpmyadmin;  
            location ~ /tmp/ { #location表示的是匹配上之后,接着下边的操作
                return 403;
            }

        #error_page   404   /404.html;#错误页面,错误码是404的话,就会在根目录下寻找404.html这个文件
        include enable-php.conf;

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

        location ~ .*.(js|css)?$
        {
            expires      12h;
        }

        location ~ /.
        {
            deny all;
        }

        access_log  /www/wwwlogs/access.log;
    }

}

导入进来的conf文件:

server #这表示的是一个虚拟主机
{
    listen 80;#端口号
    server_name xmkaifa.cn;#域名名称
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/xmkaifa.cn;#表示的是在这个目录下
    
    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #SSL-END
    
    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    #error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END
    
    #PHP-INFO-START  PHP引用配置,可以注释或修改
    include enable-php-56.conf;
    #PHP-INFO-END
    
    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/xmkaifa.cn.conf;
    #REWRITE-END
    
    #禁止访问的文件或目录
    location ~ ^/(.user.ini|.htaccess|.git|.svn|.project|LICENSE|README.md)
    {
        return 404;
    }
    
    #一键申请SSL证书验证目录相关设置
    location ~ .well-known{
        allow all;
    }
    
    # location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
    # {
    #     expires      30d;
    #     error_log /dev/null;
    #     access_log /dev/null;
    # }
    
    # location ~ .*.(js|css)?$
    # {
    #     expires      12h;
    #     error_log /dev/null;
    #     access_log /dev/null; 
    # }

}

servername的匹配规则

域名解析的顺序,一个有多个server,那么只有当上边的server匹配不到,才会匹配下边的server.

多个域名指定一个主机

servername xmkaifa.cn www.xmkaifa.cn 那么这两个域名走的就是同一个主机文件。按照顺序来,如前边的匹配上了,就不会匹配后边的文件。

通配符、正则匹配

正则匹配会有一个标识符:

~正则表达式

~^[0-9]+.xmkaifa.cn$

这个表示的是 二级域名只要是0到9开头的就都是走的这个域名

短网址

短网址就是指 xmkaifa.cn/xxxxx 这个是一个网址,nginx在这里是一个反向代理服务器,它需要通过后边的xxxxx 到数据库里边返回一个真实的网址。

也就是数据库里边是短网址后边的参数对应一个真实的网址。

代理服务器

正向代理:是指代替客户端的服务器,例如 我们所用的路由器就是代替我们上网的。这也叫做网关。

反向代理:是值代替服务器接收别人访问的。比较经典的是 java开发时需要安装tomcat服务器,这个tomcat服务器不会直接受到用户的访问,而是由nginx进行访问。这个nginx就是反向代理服务器。

nginx还有一个作用是重写url。这个地址看起来可能比较高级。

服务器的模式:

lvs模式:就是 访问 经过代理服务器,返回给客户端也要经过代理服务器。

DR模式:就是 访问经过代理服务器, 返回由服务器直接返回给客户端。【比较经典的是:下载网站,访问携带地址,也就是少量数据。返回则是一个视频资源,比较大,所以直接返回给客户】

负载均衡

负载均衡:nginx分配给后台服务器的压力均衡,指的是一个服务器集群,也就是有很多台服务器是一样的,这一样的服务器可以理解是备份机。当用户访问服务器时,则由于算法后,轮询这些服务器,也就是每个服务器分担一些压力,每台服务器使用的时间和压力差不多。

还有另外一种情是,这个服务器的集群当有坏的时,那么他的压力会被其他服务器所承担。

负载均衡的设置

upstream 名字 {

server 服务器名:端口号;

server 服务器名:端口号;

...

}

然后在对应的server里边写上反向代理多个服务器的名字:

proxy_pass: http://名字;

注意:upstream 和server是同级别的。

截图是真实的负载均衡,就是多个服务器同时会去承担这个反向服务器返回过来的压力。

反向代理服务器的设置

在server里边,我们把反向代理的服务器的方式是:

proxy_pass http://192.168.44.102

当然我们也可以同时方向给多台服务器。

反向代理不仅仅只是对公网ip进行反向代理多个,对内网,也就是局域网也是可以反向代理多个的。