1.nginx

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行(摘自百度百科)

优点

优点

说明

高并发

基于 epoll/kqueue 模型开发,能够支持高达 50,000 个并发连接数的响应

内存开销小

Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多

简单稳定

配置简单(一个conf文件),运行简单(nginx命令),而且运行稳定

模块化程度高

支持插件化配置

低成本

nginx支持负载均衡功能,而且该软件是免费开源的

缺点

缺点

说明

动态处理差

nginx善于处理静态文件,处理动态页面的能力相对于Apache等重量级web软件稍弱

2.安装和命令

Ubuntu安装

apt-get install nginx-core -y

常用命令

# 启动/停止/重启 ngix
sudo systemctl [start|stop|reload] nginx

nginx -V # 查看版本和其他信息
nginx -v # 查看版本
nginx -c /etc/nginx/nginx.conf # 使用配置文件
nginx -s [stop|reload] # [关闭|重启]
nginx -t  # 可以使用此命令判断配置文件是否正确

3.配置

3.1 nginx默认目录

目录

说明

/etc/nginx

工作目录

/usr/sbin/nginx

执行文件

/var/log/nginx

日志文件

/var/www/html/

web目录

3.2 nginx默认配置文件

目录

说明

/etc/nginx/nginx.conf

默认文件(全局配置)

/etc/nginx/conf.d

存放自定义的conf文件

/etc/nginx/{sites-available/sites-enabled/conf.d}

其他目录(存放第三方应用的配置文件)

3.3 配置参数

一个配置文件里主要有全局配置段、http配置段、server配置段、location配置段

server配置
新建一个conf配置文件,里面主要配置server,一个server代表一个服务

server {
	# 设置要监听的ip、端口
    listen 8000;
    # 当一个主机存在多个网站时,可以通过Server_name指定域名,例如server_name www.example.com;
    server_name www.mysite.com;
    # 指定Server相应请求的HTML文件所在路径
    root /var/www/html;
    # 定义相应请求后返回的文件名或格式
    index index.html index.htm index.nginx-debian.html;
}

上面的listen是指监听的ip和port

形式

说明

举例

IP:Port

精确指定IP和端口

listten 192.168.205.153:8080

IP

只指定IP,默认监听80端口

listen 192.168.205.153

Port

只指定端口,监听所有IP

listen 8080

listen 0.0.0.0:8080

default_server

默认地址,只能有一个server使用此关键字

Location配置
匹配规则(数字越小,优先级越高)

类型

含义

优先级

样式

=/路径

精确匹配

1

location = /image {}

^~

优先匹配

2

location ^~ /page {}

~ 或 !~

正则敏感或不敏感

3

location ~ .(jpe?g)$ {}

~*或 !~

正则不敏感或敏感

3

location ~* .(jpe?g)$ {}

/

通用匹配

4

location / {}

@

内部重定向

location @name {}

location匹配规律

(1)、多个location匹配字符都能匹配成功的情况下,选择优先级最高的location规则去处理
(2)、多个locaiton匹配字符都能匹配成功,且他们的优先级一样的情况下,选择先定义的location规则去处理(优先上面的)

3.4 配置举例

默认情况下NGINX有个自带的配置文件,它会把conf.d文件夹里的所有配置都加载出来,所以我们可以在conf.d文件夹里自定义配置文件,下面我将会新建两个自定义的文件进行演示

新建/etc/nginx/conf.d/8080.conf并编辑如下:

server {
    listen 8080;
    server_name binglengdexiwang.top;
    # 精准匹配,优先级最高
    location = /index {
      	proxy_pass http://127.0.0.1:8080;
     }
     # 优先匹配,若上面的精准匹配不到,则会选择优先匹配
	location ^~ /icy_pocket/ {
      proxy_pass http://127.0.0.1:8081;
         proxy_set_header Host $host;
     }
     # 优先匹配
     location ^~ /website/ {
         proxy_pass http://127.0.0.1:8081;
         proxy_set_header Host $host;
     }
     # 通用匹配,若上面的匹配全部都不对,最后到通用匹配
    location / {
        root /data/front_end_pc/;
        index index.html;
        try_files $uri $uri/ =404;
    }
}

新建/etc/nginx/conf.d/8081.conf并编辑如下:

server {
    listen 8081;
    server_name binglengdexiwang.top;

    location / {
        root /data/meiduo_mall_admin/;
        index index.html;
        try_files $uri $uri/ =404;
    }
}

注意: 每次修改配置文件都需要reload一下nginx服务器才能生效

4.配置ssl证书

刚安装好NGINX的时候是可以提供80端口的http服务的,但是如果想要加密传输,需要配置ssl证书,也就是让它变成使用443端口的https服务

如果你在域名服务商购买了域名,那应该是可以免费申请证书的,并且把它下载好,得到公钥(.pem)和私钥(.key)文件,把它上传到服务器上,例如在NGINX默认配置文件(nginx.conf)下,为了方便管理我新建了一个cert文件用于存放配置文件

cd /etc/nginx
mkdir cert

你可以新建自己的配置文件,这里仅用于演示,所以我直接修改NGINX自带的default

vim /etc/nginx/sites-available/default

配置文件里原来有一个监听80端口的server,这里再加一个443端口的server

# 这是默认的server
server {
        listen 80 default_server;
        listen [::]:80 default_server;
        root /var/www/html;
        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;
        server_name _;
        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }
        
        # 如果希望访问80端口时强制跳转443端口
        # rewrite ^(.*)$ https://$host$1 permanent;
}

# 新增一个server
server {
        listen       443 ssl; # 监听443端口,这是1.15.x版本之后写法,之前的写法端口后面不加ssl
        root /var/www/html;  # 网站根目录
        # ssl       on;  # 1.15.x版本之后这种写法被弃用,之前的写法应取消注释
        ssl_certificate      cert/dev.binglengdexiwang.top_bundle.pem;  # 证书公钥文件的路径
        ssl_certificate_key  cert/dev.binglengdexiwang.top.key;  # 证书私钥文件的路径
        ssl_prefer_server_ciphers on;
        ssl_session_timeout 10m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
        server_name _;
        index  index.html index.php index.htm;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }
}

保存之后,需要重新加载NGINX配置

nginx -t
nginx -s reload