社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

Nginx入门

21ic电子网 • 2 年前 • 335 次点击  

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个并发连接数。

15.1 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


15.2  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 updatesudo apt install nginx

6)启动

sudo  systemctl  start nginx


15.3 源码编译

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


15.4 Nginx常见配置

15.4.1 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;

15.4.2 配置日志

日志分为错误日志和访问日志,如果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

15.4.3 日志切割

日志如果不做切割,那么会一直写,直到将整个磁盘写满。阿铭曾经遇到过一台Nginx服务器上没有配置日志切割,导致访问日志写了几百个G,这是非常不负责任的。

Nginx的日志切割可以借助Linux系统的logrotate服务来完成,你只需要写一个配置文件即可:

#假设Nginx的错误日志和访问日志,都放到了/data/logs/nginx/下cat > /etc/logrotate.d/nginx </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表示当切割之后要执行的命令

15.4.4 SSL配置

SSL也就是https,配置https只需要两行配置,但是需要我们提前准备一对SSL证书,这个证书可以申请一个免费的,也可以自签。如果你有自己的域名,建议去申请一个免费的证书,推荐https://freessl.cn。如果没有自己域名,那么就自签吧,具体步骤可以参考https://github.com/aminglinux/nginx/blob/master/ssl/key.md。

配置示例:
  server {    listen 443 ssl;        server_name  www.123.com;    ssl_certificate ssl/server.crt;    ssl_certificate_key ssl/server.key;
    location / { root /tmp/123.com; index index.html index.htm;    }}
说明:
  •  443端口为ssl监听端口。

  •  ssl_certificate指定crt文件所在路径,如果写相对路径,必须把该文件和nginx.conf文件放到一个目录下。

  •  ssl_certificate_key指定key文件所在路径。


15.4.5 反向代理

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

温馨提示:

因最近微信公众平台推送规则改变,很多读者反馈没有及时看到更新的文章。根据最新规则,建议多点击“推荐阅读、分享、收藏”等,成为常读用户。


推荐阅读:


请点下【在看】给小编加鸡腿



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/151267
 
335 次点击