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