Skip to content
On this page

nginx的安装和使用

安装相关库

nginx的安装需要Linux安装相关的几个库,否则配置和编译会出现错误,这几个库分别是

  • gcc编译器:gcc
  • openssl库:openssl openssl-devel
  • pcre库:pcre pcre-devel
  • zlib库:zlib zlib-devel

一次性安装的方法:

bash
yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y

nginx的基本使用方法

nginx的启动

普通启动

切换到nginx安装目录的sbin目录下,执行:./nginx

通过配置文件启动

./nginx -c /usr/local/nginx/conf/nginx.conf /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

解释: /usr/local/nginx/sbin/nginx 和 /usr/local/nginx/conf/nginx.conf 是nginx安装目录的sbin目录以及nginx配置文件所在的路径 , -c是指定配置文件

检查nginx是否启动

bash
ps -ef | grep nginx

https://i.loli.net/2020/08/05/behtGyP5fDpEKx8.png

nginx体系结构由master进程和其worker进程组成; master进程读取配置文件,并维护worker进程,而worker进程则对请求进行实际处理

关闭nginx

优雅的关闭

找出nginx的进程号:ps -ef | grep nginx 执行命令:kill -QUIT 主pid 其中pid是主进程号的pid(master process),其他为子进程pid(worker process)

快速关闭

执行命令:kill -TERM 主pid

重启nginx

bash
./nginx -s reload

nginx配置文件

学习nginx首先需要对它的核心配置文件nginx.conf有一定的认识

nginx的核心匹配文件主要由三个部分构成:

基本配置

events配置

http配置

基本配置 多个server配置

nginx.conf文件详解

bash
#总体上分成三个部分构成:基本配置、events配置、HTTP配置,以下为配置详情
    #------------------------基本配置-------------------------
    #user  nobody; #配置worker进程运行用户
    worker_processes  1; #配置工作进程数目,根据硬件调整,通常等于CPU数量或者2倍于CPU数量

    #error_log  logs/error.log; #配置全局错误日志及类型,[debug | info | notice | warn | error | crit],默认是error
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;

    #pid        logs/nginx.pid; #配置进程pid文件

    #------------------------events配置-------------------------
    #配置工作模式和连接数
    events {
        worker_connections  1024; #配置每个worker进程连接数上限,nginx支持的总连接数就等于worker_processes * worker_connections
    }

    #------------------------HTTP配置-------------------------
    #配置HTTP服务器,利用它的反向代理功能提供负载均衡支持
    http {
        #------------------------HTTP基本配置-------------------------
        include       mime.types; #配置nginx支持哪些多媒体类型,可以在conf/mime.types查看支持哪些多媒体类型
        default_type  application/octet-stream; #默认文件类型

        #配置日志格式
        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';

        #配置access.log日志及存放路径,并使用上面定义的main日志格式
        #access_log  logs/access.log  main;

        sendfile        on; #开启高效文件传输模式
        #tcp_nopush     on; #防止网络阻塞

        #keepalive_timeout  0;
        keepalive_timeout  65; #长连接超时时间,单位:毫秒

        #gzip  on; #开启gzip压缩输出
        #------------------------HTTP_多server配置-------------------------
        server {
            listen       80; #监听端口
            server_name  localhost; #配置服务名

            #charset utf-8; #配置字符集

            #access_log  logs/host.access.log  main; #配置本虚拟主机的访问日志

            #默认的斜杠/的请求,当访问路径中有斜杠/,会被该location匹配到并进行处理
            location / {
                root   html; #root是配置服务器默认网站根目录位置,默认nginx安装主目录下的html
                index  index.html index.htm; #配置首页文件的名称
            }

            #error_page  404              /404.html; #配置404错误页

            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html; 配置50x错误页面
            location = /50x.html {
                root   html;
            }

            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ \\.php$ {
            #    proxy_pass   <http://127.0.0.1>;
            #}

            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            #location ~ \\.php$ {
            #    root           html;
            #    fastcgi_pass   127.0.0.1:9000;
            #    fastcgi_index  index.php;
            #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            #    include        fastcgi_params;
            #}

            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /\\.ht {
            #    deny  all;
            #}
        }

        # another virtual host using mix of IP-, name-, and port-based configuration
        #
        #server {
        #    listen       8000;
        #    listen       somename:8080;
        #    server_name  somename  alias  another.alias;

        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}

        # HTTPS server
        #
        #server {
        #    listen       443 ssl;
        #    server_name  localhost;

        #    ssl_certificate      cert.pem;
        #    ssl_certificate_key  cert.key;

        #    ssl_session_cache    shared:SSL:1m;
        #    ssl_session_timeout  5m;

        #    ssl_ciphers  HIGH:!aNULL:!MD5;
        #    ssl_prefer_server_ciphers  on;

        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
}

nginx的主要应用

静态网站

修改配置文件

server {
                listen       80; #监听端口
                server_name  localhost; #配置服务名

                #charset utf-8; #配置字符集

                #access_log  logs/host.access.log  main; #配置本虚拟主机的访问日志

                #默认的斜杠/的请求,当访问路径中有斜杠/,会被该location匹配到并进行处理
                location / {
                    root   static_path; #配置静态网页根目录位置,默认nginx安装主目录下的html
                    index  index.html index.htm; #配置首页文件的名称
                }
}

负载均衡

访问入口只有一个,针对不同的请求分发到相应的服务器上去做处理

硬件负载均衡:eg: F5/深信服/Array等,缺点是费用昂贵,对于规模较小的网络应用成本太高 软件负载均衡:eg: nginx/LVS/HAProxy等,有点免费开源,成本低廉

实现方式

用户-->nginx负载均衡-->{Tomcat1,Tomcat2}访问动态资源

通过在nginx的nginx.conf 文件进行配置

1、在http模块上添加:

bash
upstream www.myweb.com {
     server 127.0.0.1:9100 weight=3;
     server 127.0.0.1:9200 weight=1;
}

2、在server模块里添加

bash
location /myweb {
      proxy_pass <http://www.myweb.com>
}
#其中www.myweb.com字符串要和upstream后面的字符串相等

负载均衡策略

轮询(默认):在server后不添加weight参数 在http模块上添加:

bash
upstream www.myweb.com {
     server 127.0.0.1:9100;
     server 127.0.0.1:9200;
}

权重:在server后添加weight参数(weight越大,权重也大,访问的次数就越多),访问几率和weight比接近 在http模块上添加:

bash
upstream www.myweb.com {
     server 127.0.0.1:9100 weight=3;
     server 127.0.0.1:9200 weight=1;
}

ip_hash:也叫IP绑定,每个请求访问IP的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话Session丢失问题 在http模块上添加:

bash
upstream www.myweb.com {
	ip_hash;
	server 127.0.0.1:9100 weight=3;
        server 127.0.0.1:9200 weight=1;
}

最少连接:web请求会被转发到最少连接数的服务器上

bash
upstream www.myweb.com {
	least_conn;
	server 127.0.0.1:9100 weight=3;
	server 127.0.0.1:9200 weight=1;
}

负载均衡其他配置

bash
upstream www.myweb.com {
        server 127.0.0.1:9100;
        server 127.0.0.1:9200 backup; #其他所有的非backup机器down的时候,才请求backup机器
}

upstream www.myweb.com {
        server 127.0.0.1:9100;
        server 127.0.0.1:9200 down; #down表示当前的server是down状态,不参与负载均衡
}

静态代理

https://i.loli.net/2020/08/05/mqjGLAKNb4xk5nu.png

通过在nginx的nginx.conf文件进行配置

1、通过在nginx.conf配置文件中配置静态资源的location

bash
#当访问静态资源,则从Linux服务器/opt/static目录下获取(举例)
    location ~ .*\\.(js|css|html|gif|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
        root /opt/static;
    }
    #其中:~表示正则匹配,也就是说后面的内容可以是正则表达式匹配
    #       第一个点.表示任意字符
    #       *表示一个或多个字符
    #       \\是转义字符,是后面点的转义字符标志
    #       |表示或者
    #       $表示结尾
    #整个配置表示以.后面括号里面的这些为后缀结尾的文件都有nginx处理;
    #注意:放置静态资源的目录,需要有足够的权限,权限不足会报403错误,建议:chmod 755

通过在nginx.conf配置文件中配置静态资源所在目录实现

bash
location ~ .*/(css|js|img|images) {
        root /opt/static
    }

动静分离

nginx的负载均衡和静态代理结合在一起,就可以实现动静分离,这是实际应用常见的一种场景

动态资源,如jsp有tomcat或其它web服务器完成

静态资源,如图片,css,js等由nginx服务器完成

https://i.loli.net/2020/08/05/7frB1mHxAukqpi2.png

nginx在一台Linux上安装一份,可以启动多个nginx,每个nginx的配置文件不一样即可分类别(动态资源,静态资源)多配置

虚拟主机

虚拟主机就是把一台服务器划分成多个“虚拟”的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站

https://i.loli.net/2020/08/05/IcfDAMiFbnse6BS.png

nginx提供虚拟主机的功能,就是为了让我们不需要安装多个nginx,就可以运行多个网站 nginx下,一个server标签就是一个虚拟主机 nginx的虚拟主机就是通过nginx.conf中server节点指定的,想要配置多个虚拟主机,配置多个server节点即可

配置虚拟主机通常有一下两种方式:

基于域名的虚拟主机

bash
server{
        listen          80;
        server_name     www.wang.com;
        location /wang {
            proxy_pass <http://www.wang.com>; #还应该配置名称为www.wang.com的负载均衡
        }
    }

    server{
        listen          80;
        server_name     www.bin.com;
        location /bin {
            proxy_pass <http://www.bin.com>; #还应该配置名称为www.bin.com的负载均衡
        }
    }

基于端口的虚拟主机

bash
server{
        listen          8080;
        server_name     www.wang.com;
        location /wang {
            proxy_pass <http://www.wang.com>;
        }
    }

   server{
        listen          9090;
        server_name     www.wang.com;
        location /wang {
            proxy_pass <http://www.wang.com>;
        }
    }

通过include的方式引入虚拟主机配置

bash
include /usr/local/nginx/vhost/vhost.conf;

将虚拟目录的配置文件加入到“http{}”部分的末尾,与其他server并列; 其中vhost.conf中的内容同基于域名的虚拟主机的server配置相同 在nginx.conf中的http末尾include vhost.conf_path 即可