nginx 的安装与基本使用
nginx基本概念
nginx 是一款开源、高性能的http web服务器和反向代理服务器以及电子邮件代理服务器。又俄罗斯Igor Sysoev开发。nginx最重要的指标是性能,官方测试nginx 内存占用少、并发能力强,能支持高达5W个并发连接。配置灵活。nginx 还有一个明显的优点是支持热部署应用,我们不需要关闭nginx服务,就可升级更新我们的应用。nginx最核心的功能是反向代理和负载均衡。
nginx 应用场景
- 静态资源服务:部署前端静态资源文件实现http方式的资源访问,实现动静分离的目的,适应前后端分离,前端应用和后台服务解耦,分别部署,前端部署在nginx,后台服务跑在tomcat服务器上。
- 反向代理服务:前后端分离的情况下通过nginx可以配置请求的反向代理[把前端对后台服务的请求根据匹配配置的原则,代理转发到指定服务器上],可以用来解决跨域请求问题,把我们跨域的请求通过反向代理配置,代理访问后台服务,把后台服务的响应返回给我们的前端应用,前后端分离时也可解决携带跨域cookie的问题,具体参考下面的nginx基本使用配置。
- 负载均衡:通过nginx配置可实现访问后端API接口的负载均衡[均匀把请求转发到后台服务器,降低单台服务器压力],nginx负责均衡策略(轮询,权重,最小连接数策略,最快响应时间策略,一致性哈希)
nginx 之所以流行应用起来归功于它优秀的性能支持和其可配置的反向代理和负载均衡适应现在前后端分离的趋势。
反向代理和负载均衡参考:https://zhuanlan.zhihu.com/p/369926646
nginx的安装
nginx 的安装有三种常用方式:包管理工具 apt/yum ,压缩包编译安装,docker安装。docker 安装比较简单,但是需要注意的是创建容器时需要通过数据卷方式实现数据持久化保存和网络通信的配置。下面以Ubuntu采用包管理工具apt安装nginx 介绍。
sudo apt-get install nginx # 安装nginx
nginx -v # 查看nginx 版本
service nginx status # 查看nginx 运行状态
浏览器访问主机ip测试nginx 安装情况。nginx 默认会监听80端口
nginx文件安装完成之后的文件位置:
/usr/sbin/nginx:主程序(nginx 基本命令)
/etc/nginx:存放配置文件(默认配置文件,可通过配置连接应用服务server的nginx配置)
/usr/share/nginx:存放静态文件(默认静态资源目录,可以通过配置改变)
/var/log/nginx:存放日志(默认日志目录配置,可以细化为每个应用配置记录日志)
nginx 默认配置(/etc/nginx 下的 nginx.conf)
# main 主配置信息
user www-data; # 运行用户
worker_processes auto; # nginx 进程树,一般设置为cpu核树
pid /run/nginx.pid; # nginx 启动时 pid 存放文职
include /etc/nginx/modules-enabled/*.conf; # 引入nginx 模块加载配置,加载相关nginx模块
# events段配置信息
events {
worker_connections 768;
# multi_accept on;
use epoll; # 使用epoll的I/O模型(如果你不知道Nginx该使用哪种轮询方法,会自动选择一个最适合你操作系统的,可配置auto)
}
# http段配置信息
# 配置使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs 可配置引用外部配置加载常用的server段配置
##
include /etc/nginx/conf.d/*.conf;
# 官方首页的nginx配置例子
include /etc/nginx/sites-enabled/*;
include /home/hadoop/nginxProject/knowyou-app/nginx.conf;
}
#mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}
配置详细简介(https://zhuanlan.zhihu.com/p/369926646)
# main段配置信息
user nginx; # 运行用户,默认即是nginx,可以不进行设置
worker_processes auto; # Nginx 进程数,一般设置为和 CPU 核数一样
error_log /var/log/nginx/error.log warn; # Nginx 的错误日志存放目录
pid /var/run/nginx.pid; # Nginx 服务启动时的 pid 存放位置
# events段配置信息
events {
use epoll; # 使用epoll的I/O模型(如果你不知道Nginx该使用哪种轮询方法,会自动选择一个最适合你操作系统的)
worker_connections 1024; # 每个进程允许最大并发数
}
# http段配置信息
# 配置使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置
http {
# 设置日志模式
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 /var/log/nginx/access.log main; # Nginx访问日志存放位置
sendfile on; # 开启高效传输模式
tcp_nopush on; # 减少网络报文段的数量
tcp_nodelay on;
keepalive_timeout 65; # 保持连接的时间,也叫超时时间,单位秒
types_hash_max_size 2048;
include /etc/nginx/mime.types; # 文件扩展名与类型映射表
default_type application/octet-stream; # 默认文件类型
include /etc/nginx/conf.d/*.conf; # 加载子配置项
# server段配置信息,一般情况下不建议配置在这里,建议一个应用一个server配置文件,用include 方式加载子配置项
server {
listen 80; # 配置监听的端口
server_name localhost; # 配置的域名
# location段配置信息
location / {
root /usr/share/nginx/html; # 网站根目录
index index.html index.htm; # 默认首页文件
deny 172.168.22.11; # 禁止访问的ip地址,可以为all
allow 172.168.33.44;# 允许访问的ip地址,可以为all
}
error_page 500 502 503 504 /50x.html; # 默认50x对应的访问页面
error_page 400 404 error.html; # 同上
}
}
卸载nginx(卸载nginx之前做好数据备份和提前停止nginx服务)
sudo apt-get remove nginx nginx-common # 卸载删除除了配置文件以外的所有文件。
sudo apt-get purge nginx nginx-common # 卸载所有东东,包括删除配置文件。
sudo apt-get autoremove # 在上面命令结束后执行,主要是卸载删除Nginx的不再被使用的依赖包。
sudo apt-get remove nginx-full nginx-common #卸载删除两个主要的包。
常用命令
nginx -v # 查看nginx 版本
service nginx start|stop|status|restart # nginx 服务管理
./nginx -s reload # nginx 配置文件或应用更新,热部署更新
nginx -s reopen # 重启 Nginx
nginx -s stop # 快速关闭
nginx -s quit # 等待工作进程处理完成后关闭
nginx -T # 查看当前 Nginx 最终的配置
nginx -t # 检查配置是否有问题
systemctl status nginx.service # nginx 服务启动报错排错
systemctl status nginx.service -l # nginx 服务启动报错排查
nginx基本使用
前后端分离应用部署案例
1.上传应用到服务器
2.编写应用的nginx配置文件,配置server 段信息
server
{
listen 8085;
server_name 192.168.11.131;
index login.html;
root /home/hadoop/nginxProject/knowyou-app/knowyou;
# 访问登录限制,需要nginx启动时加载对应模块,否则会报错
# limit_conn perserver 300;
# limit_conn perip 25;
# limit_rate 512k;
# 请求转发,反向代理
location /api {
# 反向代理服务地址
proxy_pass http://192.168.43.237:8080;
# 可以携带跨域cookie,解决携带跨域cookie问题
proxy_cookie_domain 192.168.43.237:8080 192.168.11.131:8085;
}
#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
error_page 404 /error/404.html;
error_page 500 /error/500.html;
error_page 403 /error/403.html;
#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
#error_page 404 /404.html;
#error_page 502 /502.html;
#ERROR-PAGE-END
#PHP-INFO-START PHP引用配置,可以注释或修改
# include enable-php-70.conf;
#PHP-INFO-END
#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
# include /www/server/panel/vhost/rewrite/182.92.221.190.conf;
#REWRITE-END
# 放行静态资源
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
error_log off;
access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
expires 12h;
error_log off;
access_log /dev/null;
}
#一键申请SSL证书验证目录相关设置
#location ~ \.well-known{
# allow all;
#}
# 日志存放目录
access_log /home/hadoop/nginxProject/knowyou-app/log/access.log;
error_log /home/hadoop/nginxProject/knowyou-app/log/error.log;
}
推荐文章
nginx 基本安装和使用:
https://blog.csdn.net/laiyuan999/article/details/108503894
https://blog.csdn.net/duguyuyun12345/article/details/83471821
https://www.cnblogs.com/alterem/p/11490367.html
nginx 详细讲解:
https://zhuanlan.zhihu.com/p/369926646
nginx启动排错方案:
https://www.shuzhiduo.com/A/MAzA7Qao59/