开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情
安装
使用官方推荐的repo方式安装,也可以使用docker。
基于docker安装
搜索看下官方提供的镜像:
# 搜索
[root@localhost ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 17735 [OK]
linuxserver/nginx An Nginx container, brought to you by LinuxS… 181
bitnami/nginx Bitnami nginx Docker Image 143 [OK]
ubuntu/nginx Nginx, a high-performance reverse proxy & we… 67
bitnami/nginx-ingress-controller Bitnami Docker Image for NGINX Ingress Contr… 22 [OK]
rancher/nginx-ingress-controller 11
ibmcom/nginx-ingress-controller Docker Image for IBM Cloud Private-CE (Commu… 4
bitnami/nginx-ldap-auth-daemon 3
# 拉取
[root@localhost ~]# docker pull nginx
# 运行
[root@localhost ~]# docker run -d -p 80:80 \
-p 443:443 \
--name nginxweb \
-v /opt/docker/nginx/html:/usr/share/nginx/html \
-v /opt/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /opt/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /opt/docker/nginx/logs:/var/log/nginx \
nginx
这样就可以了,配置文件和部署目录也已经挂载到本地 /opt/目录下。
基于repo安装
# 准备
sudo yum install yum-utils -y
# 设置repo
vim /etc/yum.repos.d/nginx.repo
# 输入以下内容------------------
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
# 输入以上内容------------------
# 执行安装
sudo yum install nginx
默认nginx repo会安装稳定版本,如果想改为最新版本,可使用:
sudo yum-config-manager --enable nginx-mainline
查看安装详情
版本及基本信息
nginx -V
- 默认主配置文件:--conf-path=/etc/nginx/nginx.conf
- 实际server配置文件:/etc/nginx/conf.d/default.conf,可以创建多个server配置文件并导入主配置文件即可
安装详情
执行rpm -ql nginx,输出以下内容:
[root@localhost ~]# rpm -ql nginx
/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/conf.d
# 这里是主配置文件中,include引入的server配置块内容,也就是我们日常配置的主要文件
/etc/nginx/conf.d/default.conf
/etc/nginx/fastcgi_params
/etc/nginx/mime.types
/etc/nginx/modules
# 主配置文件,这里只包含http配置块,server配置块在另外一个地方,采用include引入
/etc/nginx/nginx.conf
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
/usr/lib/systemd/system/nginx-debug.service
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx
/usr/lib64/nginx/modules
/usr/libexec/initscripts/legacy-actions/nginx
/usr/libexec/initscripts/legacy-actions/nginx/check-reload
/usr/libexec/initscripts/legacy-actions/nginx/upgrade
/usr/sbin/nginx
/usr/sbin/nginx-debug
/usr/share/doc/nginx-1.21.4
/usr/share/doc/nginx-1.21.4/COPYRIGHT
/usr/share/man/man8/nginx.8.gz
# 部署时,静态文件存放的位置
/usr/share/nginx
/usr/share/nginx/html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/var/cache/nginx
/var/log/nginx
进一步查看真正的nginx.conf文件在哪里?
执行vim /etc/nginx/nginx.conf 查看配置:
这种http指令块和server指令块分离的好处,可以单独配置多个server,且不会因为某个新手员工犯错导致其他服务不可用的风险
基本使用
Nginx有一个主进程和几个工作进程。主进程的主要目的是读取和评估配置,并维护工作进程。工作进程实际处理请求。
nginx使用基于事件的模型和依赖于os的机制来有效地在worker进程之间分发请求。工作进程的数量在配置文件中定义,可以根据给定的配置而固定,也可以根据可用的CPU核数自动调整。
常用指令
- stop — 快速关闭,不安全
- quit — 安全关闭,会等待执行完当前的请求
- reload — 重新加载配置文件,如果配置文件正确,会启动新的work进程,并尝试关闭旧进程,旧进程收到通知不再接受新请求,并执行完当前请求后关闭
- reopen —重新打开日志文件
以上命令需在运行nginx的同一个用户下执行。
可以直接发送信号给nginx进程:
# 其中1628是pid
kill -s QUIT 1628
通过 ps -ax | grep nginx 可以获取Nginx所有进程。
关于reload
nginx主进程收到指令后,会检查nginx.conf配置文件是否正确,如果有错误,依然使用原来配置,新配置文件不生效。
如果没问题,会向工作进程work-processes发送关闭的信号,工作进程收到信号后,会首先停止接受新的请求,并把当前请求处理完,最后关闭自己。
基本配置
server{
listen 8080;
server_name localhost;
# 如果在子节点不配置root,则该配置生效
root /www;
location / {
# 该配置文件生效,就近员原则
root /data/www;
}
# 匹配的路径越详细越生效,即越长越生效
# root和alias区别是:alias会把匹配的部分去掉,root会直接拼接到后面
location /images/ {
# 访问localhost:8080/images/banner.jpg时,实际会到/data/images/banner.jpg查找
root /data;
# 访问localhost:8080/images/banner.jpg时,实际会到/data/images/banner.jpg查找
#alias /data/images;
}
# 正则前缀有一个 ~,优先级最高
location ~ .(gif|jpg|png)$ {
# 访问localhost:8080/images/a.gif时,会到/data/images/a.gif查找
root /data;
# 浏览器30天内再次访问图片时,直接访问浏览器缓存(f12看response-header中的expires,但会被cache-control:max-age覆盖),不再请求nginx
expires 30d;
}
}
server_name
根据请求中的Host判断。
服务名中的 * 号,只能出现在 server_name 的开头或结尾,并且以 . 与其他部分隔开,不能出现在中间或者替代部分单词。
匹配顺序
- 完全匹配的名字
- 以*开头的名字
- 以*结尾的名字
- 其他正在表达式
如果相同的匹配到多个,则按照上下顺序,采用第一个。
按照以上顺序,查找性能越来越慢,所以要尽可能配置为具体的服务器名。
一个配置案例
user nginx;
worker_processes 2;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/css text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";
server {
listen 8036;
server_name 192.168.10.101;
location / {
root html;
index index.html index.htm;
}
location ~/group[1-3]/M00 {
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
upstream rhpwServer{
server 192.168.10.101 max_fails=3;
}
upstream sewage{
server 192.168.10.101 max_fails=3;
}
server {
listen 5001;
server_name localhost;
location / {
root /home/projs/proj02/web/dist;
index index.html index.htm;
}
location ^~ /proj02/ {
proxy_pass http://localhost;
proxy_set_header Host $host:8099;
proxy_redirect off ;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 100m;
client_body_buffer_size 256K;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_next_upstream error timeout invalid_header http_503;
proxy_max_temp_file_size 128m;
}
}
server{
listen 7001;
server_name 192.168.10.101;
location / {
root /home/proj2/proj01/app/dist;
index index.html index.htm;
}
}
server{
listen 3000;
server_name 192.168.10.101;
location / {
root /home/projs/proj01/web/dist;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location ^~ /proj01/ {
proxy_pass http://localhost;
proxy_set_header Host $host:8099;
proxy_redirect off ;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 100m;
client_body_buffer_size 256K;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_next_upstream error timeout invalid_header http_503;
proxy_max_temp_file_size 128m;
}
}
}