Nginx入门 Linux环境部署
Nginx是由Igor Sysoev(俄罗斯人)为当地网站Rambler.ru所开发的一款高性能WEB 服务软件,第一个公开版本于2004年10月发布。一开始Nginx并不为人所知,后来由于它诱人的高并发架构、模块化设计、反向代理/负载均衡功能以及不少于Apache的多样化功能使得它越来越流行,使得它目前的市场占有率甚至要超过Apache。
Nginx官方网站http://nginx.org,随着近些年Nginx使用量越来越高,它的版本迭代效率也是非常之高。在国内几乎所有的大型互联网企业都在使用Nginx,而阿里巴巴公司更是基于Nginx开发了它的一个分支版本Tengine。Nginx之所以非常流行得益于它的高并发特性,当然反向代理和负载均衡的功能也是各个企业使用Nginx作为WEB服务器的主要原因之一。nginx作为HTTP服务器,专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 。它支持内核epoll模型,基于事件处理请求连接,从而能经受高负载的考验。有报告表明Nginx单机能支撑高达 50,000个并发连接数。
RHEL/Rocky 通过yum安装
1)编辑源 vi /etc/yum.repos.d/nginx.repo #内容如下 [nginx-stable]name=nginx stable repobaseurl=http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=1enabled=1gpgkey=https://nginx.org/keys/nginx_signing.keymodule_hotfixes=true[nginx-mainline]name=nginx mainline repobaseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/gpgcheck=1enabled=0gpgkey=https://nginx.org/keys/nginx_signing.keymodule_hotfixes=true
2)安装 yum install -y nginx
3)启动 systemctl start nginx
Ubuntu 通过apt安装
1)安装依赖 sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring
2)导入官方key curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
3)设置源 echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \ http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
4)设置仓库优先级,保证优先使用Nginx官方的源 echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \ | sudo tee /etc/apt/preferences.d/99nginx
5)安装 sudo apt update sudo apt install nginx
6)启动 sudo systemctl start nginx
源码编译
1)下载源码 cd /usr/local/srcsudo curl -O http://nginx.org/download/nginx-1.23.0.tar.gz
2)解压 sudo tar zxf nginx-1.23.0.tar.gzcd nginx-1.23.0
3)安装依赖 ## RHEL/Rockysudo yum install -y gcc make pcre-devel zlib-devel openssl-devel##ubuntusudo apt install -y gcc make libpcre++-dev libssl-dev zlib1g-dev
4)配置 sudo ./configure --prefix=/usr/local/nginx --with-http_ssl_module
5)编译和安装 sudo make && sudo make install
6)编辑system服务管理脚本 sudo vi /lib/systemd/system/nginx.service #写入如下内容[Unit]Description=nginx - high performance web serverDocumentation=http://nginx.org/en/docs/After=network-online.target remote-fs.target nss-lookup.targetWants=network-online.target[Service]Type=forkingPIDFile=/usr/local/nginx/logs/nginx.pidExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.confExecReload=/bin/sh -c "/bin/kill -s HUP $(/bin/cat /usr/local/nginx/logs/nginx.pid)"ExecStop=/bin/sh -c "/bin/kill -s TERM $(/bin/cat /usr/local/nginx/logs/nginx.pid)"[Install]WantedBy=multi-user.target
7)加载服务 sudo systemctl daemon-reload
8)启动服务 sudo systemctl start nginx
Nginx常见配置
Nginx虚拟主机一个Nginx服务下,可以配置多个虚拟主机,每一个虚拟主机代表着一个网站,我们可以使用域名来区分每一个虚拟主机。
虚拟主机在配置文件里,就是每一个server { } 配置段,配置示例:
mkdir /usr/local/nginx/conf/vhostsvi /usr/local/nginx/conf/vhosts/123.conf #内容如下 server { listen 8080; server_name www.123.com; location / { root /tmp/123.com; index index.html index.htm; } }在虚拟主机中有一个默认虚拟主机的概念,所谓默认虚拟主机就是任何域名解析过来,都会访问到那个虚拟主机里。相同端口的第一个虚拟主机为默认虚拟主机,还可以手动配置 default_server:
listen 80 default_server;安全考虑,默认虚拟主机禁止访问,增加配置
deny all;
配置日志
日志分为错误日志和访问日志,如果Nginx服务出现问题,就需要查看错误日志来分析问题原因。而访问日志记录了用户访问Nginx服务的过程,访问日志会记录客户端IP、访问时间、访问目标大小、访问地址、客户端代理标识、客户端referer等信息,这些信息也可以自定义。先来看错误日志,配置参数格式:error_log /path/to/log level。这个level指的是错误日志级别,常见的错误日志级别有debug | info | notice | warn | error | crit | alert | emerg。级别越高记录的信息越少,如果不定义,默认级别为error。当排查问题时,可能会调整错误日志级别,因为只有调整到可以输出更多信息的日志级别,才能看到想要的日志信息。Nginx错误日志示例:
error_log /var/log/nginx/error.log crit;如果要想彻底关闭error_log,需要这样配置:
error_log /dev/null;再来看访问日志access_log,关于访问日志,有一个log_format的配置,它用来定义访问日志的格式,也就是说通过这个日志格式来定义记录哪些信息,配置示例:
log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'
'$host "$request_uri" $status'
'"$http_referer" "$http_user_agent"';这个combined_realip就是日志格式的名字,可以在access_log配置段引用: access_log /data/logs/nginx/www.aminglinux.com-access.log combined_realip;关于日志格式,各个变量的含义,阿铭给大家准备了一个表格: 变量 | 说明 | $remote_addr | 客户端(用户)IP地址 | $status | 请求状态码,如200,404,301,302等 | $request | 请求方式(GET或者POST等)+URL(包含$request_method,$host,$request_uri) | $http_user_agent | 用户浏览器标识 | $http_host | 请求的url地址(目标url地址)的host | $host | 等同于$http_host | $http_referer | 来源页面,即从哪个页面转到本页,如果直接在浏览器输入网址来访问,则referer为空 | $uri | 请求中的当前URI(不带请求参数,参数位于$args),不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改。 | $document_uri | 等同于$uri | $request_uri | 比$uri多了参数,即$uri+$args | $http_x_forwarded_for | 如果使用了代理,这个参数会记录代理服务器的ip和客户端的ip |
日志切割 日志如果不做切割,那么会一直写,直到将整个磁盘写满。阿铭曾经遇到过一台Nginx服务器上没有配置日志切割,导致访问日志写了几百个G,这是非常不负责任的。
Nginx的日志切割可以借助Linux系统的logrotate服务来完成,你只需要写一个配置文件即可: #假设Nginx的错误日志和访问日志,都放到了/data/logs/nginx/下cat > /etc/logrotate.d/nginx <<EOF/data/logs/nginx/*log { daily rotate 30 missingok notifempty compress sharedscripts postrotate /bin/kill -USR1 \$(cat /usr/local/nginx/logs/nginx.pid 2>/dev/null) 2>/dev/null endscript}EOF说明:- daily表示每天切割
- rotate 30表示日志保留30天
- missingok表示忽略错误
- notifempty表示如果日志为空,不切割
- compress表示压缩
- sharedscripts和endscript中间可以引用系统的命令
- postrotate表示当切割之后要执行的命令
SSL配置配置示例: server { listen 443 ssl; ssl_certificate ssl/server.crt; ssl_certificate_key ssl/server.key;
location / { root /tmp/123.com; index index.html index.htm; } } 说明:反向代理
Nginx在日常的工作中绝大多数都是作为反向代理在提供服务。比较典型的场景是:域名没有备案,可以把域名解析到香港一台云主机上,在香港云主机做个代理,而网站数据是在大陆的服务器上。配置示例:
server{ listen 80;
server_name aminglinux.com;
location /
{
proxy_pass http://123.23.13.11/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
说明:proxy_pass后面跟的url就是被代理服务器的地址。下面的三个proxy_set_header是一个固定配置,一直带着便是。
来源:阿铭linux
|