基本概念
-
Nginx是一款高性能的HTTP和反向代理web服务器,同时提供IMAP,POP3和SMTP服务
-
Nginx是一款轻量级的web服务器,反向代理服务器,同时也是IMAP,POP3和SMTP电子邮件服务器,在BSD-like协议下运行
-
Nginx的特点是占用内存少,并发能力强
-
Nginx的两个特性:
-
Nginx命令:
-
启动: start nginx
-
关闭: nginx -s stop
-
重启: nginx -s reload
-
Nginx使用的是HTTP服务的默认端口80, 所以访问地址不用写端口号
-
80端口是为超文本传输协议HTTP开放的,因为浏览网页服务默认的端口号都是80, 因此只要输入HTTP地址即可,不需要输入端口号80
- Nginx使用的端口号在nginx-1.18.0\conf\nginx.conf中配置
# 设定虚拟主机配置
server {
# 监听80端口
listen 80;
# 定义服务名,通常和域名相同,多个域名使用逗号隔开
server_name 域名1,域名2;
# 编码方式
charset UTF-8;
# 配置虚拟主机的访问日志
access_log IP地址;
# 配置URL映射
location / {
# 监听请求转发的端口,也就是服务端口,通过代理实现
proxy_pass http://127.0.0.1:8888
}
}
HTTPS证书
- 安装HTTPS证书的前提是安装好Nginx, 在Nginx中配置安装HTTPS证书
- 安装HTTPS证书的两种方式:
acme
安装依赖项
yum -q -y install openssl crontabs socat curl
curl https://get.acme.sh | sh
生成证书
- 使用acme.sh生成证书时,会暂时占用80端口.所以需要关闭nginx以释放占用的80端口,并且保证没有其余的进程占用80端口
- 关闭nginx
cd /usr/local/nginx/sbin/
./nginx -s stop
/root/.acme.sh/acme.sh --issue -d 域名 --standalone --keylength ec-256 --force
证书更新
- 由于Let’s Encrypt的证书有效期只有3个月,因此需要90至少更新一次证书
-
acme.sh脚本会每60天自动更新一次证书
- 可以手动更新证书
/root/.acme.sh/acme.sh --renew -d mydomain.com --force --ecc
安装证书和密钥
mkdir /etc/https/
/root/.acme.sh/acme.sh --installcert -d 域名 --ecc \
--fullchain-file /etc/https/域名.crt \
--key-file /etc/https/域名.key
阿里云
获取证书
- 在阿里云官网申请证书成功后,将证书文件的压缩包下载到本地并解压,包括pem文件和key文件
安装证书
cd /usr/local/nginx
mkdir cert
- 将解压好的pem文件和key文件存放到cert文件夹中
Nginx配置
# 运行用户
user nobody;
# 启动进程,通常设置成和CPU数量相等
worker_process 1;
# 全局错误日志和PID文件
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
pid logs/niginx.pid;
# 工作模式和连接数上限
events {
# use epoll; epoll是多路复用IO,及I/O Multiplexing中的一种方式,仅用于Linux2.6以上的内核,可以大大提高Linux内核的性能
worker_connections 1024;
# multi_accept on;
}
# 设定http服务器,利用反向代理功能提供负载均衡支持
http {
# 设定mime类型,类型由mime.type文件定义
include /usr/local/nginx/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 logs/access.log main;
# sendfile指令指定nginx是否调用sendfile函数,使用zero copy方式来输出文件. 对于普通应用,必须设置为on;如果是用于下载的等磁盘IO重负载应用,可以设置为off,这样可以平衡磁盘与网络I/O处理速度,降低系统的uptime
sendfile on;
# tcp_nopush;
# 连接超时时间-keepalive_timeout
# keepalive_timeout 0;
keepalive_timeout 60;
tcp_nodelay on;
# 开启gzip压缩
gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
# 设定请求缓冲
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
include /usr/local/nginx/conf.d/*.conf;
include /usr/local/nginx/site-enabled/*;
# 端口转发,80端口跳转到443端口
server {
listen 80 default_server;
server_name 域名;
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
server {
listen 443 ssl;
ssl_certificate /etc/https/域名.crt;
ssl_certificate_key /etc/https/域名.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
server_name 域名;
location / {
# 定义服务器的默认网站根目录位置
root /root;
# 定义首页索引文件的名称
index index.php index.html index.htm;
}
# 定义错误提示页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /root;
}
# 静态文件,Nginx处理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
root /var/www/virtual/htdocs;
# 过期时间为30天
expired 30d;
}
# 设定查看Nginx状态的地址
location /NginxStatus {
stub_status on;
access_log on;
auth_asic "NginxStatus";
auth_basic_user_file conf/htpassword;
}
# 设定禁止访问.htxx文件
location ~ /\.ht {
deny all;
}
# -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# 设定均衡服务器列表
upstream servers1 {
# weight参数表示权重,权重越高,被分配到的几率越大
#本机上的Squid开启3128端口
server 192.168.8.1x:3128 weight=5;
server 192.168.8.2x:80 weight=1;
server 192.168.8.3x:80 weight=6;
}
upstream servers2 {
# weight参数表示权重,权重越高,被分配到的几率越大
server 192.168.8.x:80 weight=1;
server 192.168.8.x:80 weight=6;
}
# 虚拟服务器
server {
# 监听192.168.8.x的80端口
listen 80;
server_name 域名;
# 对aspx后缀的进行负载均衡配置
location ~.*\.aspx$ {
# 定义服务器默认网站根目录位置
root /root;
# 定义首页索引文件的名称
index index.php index.html index.htm;
# 设置请求转向servers定义的服务器列表
proxy_pass http://servers;
# 反向代理相关配置
proxy_redirect off;
# 后端的Web服务器可以通过x_forwarded_for获取用户的真实IP
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forward_for;
# 允许客户端请求的最大单文件字节数
client_max_body_size 10m;
# 缓存区代理缓冲用户端请求的最大字节数
client_body_buffer_size 128k;
# 代理连接超时:Nginx于后端服务器连接超时时间
proxy_connect_timeout 90;
# 代理发送超时:后端服务器数据回传时间
proxy_send_timeout 90;
# 代理接收超时: 连接成功后,后端服务器响应时间
proxy_read_timeout 90;
# 设置代理服务器Nginx保存用户头信息的缓存区大小
proxy_buffer_size 4k;
# 设置proxy_buffers缓冲区,网页平均在32k以下
proxy_buffers 4 32k;
# 设置高负荷下缓冲大小,通常为proxy_buffers与负载均衡服务器数量倍数
proxy_busy_bufffers_size 64k;
# 设置缓存文件夹大小,大于这个值,将会从upstream服务器传
proxy_temp_file_write_size 64k;
}
}
}
}