Nginx基础配置

1.守护进程

1
2
3
4
root@user-ubantu:~# ps -ef | grep nginx
root 6905 1 0 10:36 ? 00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 6907 6905 0 10:36 ? 00:00:00 nginx: worker process
www-data 6908 6905 0 10:36 ? 00:00:00 nginx: worker process
  • master主进程
  • worker子进程

2.查看端口占用情况

1
2
3
4
5
6
7
8
root@user-ubantu:~# lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 6905 root 6u IPv4 51224 0t0 TCP *:http (LISTEN)
nginx 6905 root 7u IPv6 51225 0t0 TCP *:http (LISTEN)
nginx 6907 www-data 6u IPv4 51224 0t0 TCP *:http (LISTEN)
nginx 6907 www-data 7u IPv6 51225 0t0 TCP *:http (LISTEN)
nginx 6908 www-data 6u IPv4 51224 0t0 TCP *:http (LISTEN)
nginx 6908 www-data 7u IPv6 51225 0t0 TCP *:http (LISTEN)

3.命令

1
2
3
4
5
6
7
8
9
10
//优雅停止
$ nginx -s quit
//立即停止
$ nginx -s stop
//重载配置文件
$ nginx -s reload
//重新打卡日志文件
$ nginx -s reopen
//查看nginx 配置是否有误
$ nginx -t
  • 查看nginx配置是否有误(语法检查)
1
2
3
root@gaomu-ubantu:/etc/nginx# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
  • 查看nginx的配置信息
1
2
3
4
5
root@gaomu-ubantu:~# nginx -V
nginx version: nginx/1.18.0 (Ubuntu)
built with OpenSSL 3.0.2 15 Mar 2022
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2 -ffile-prefix-map=/build/nginx-zctdR4/nginx-1.18.0=. -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -flto=auto -Wl,-z,relro -Wl,-z,now -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-compat --with-debug --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --add-dynamic-module=/build/nginx-zctdR4/nginx-1.18.0/debian/modules/http-geoip2 --with-http_addition_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_sub_module
  • 其中–conf-path=/etc/nginx/nginx.conf为nginx 配置文件位置

  • –prefix=/usr/share/nginx 为nginx安装目录

4.默认页面

  • nginx默认页面配置在 /etc/nginx/sites-enabled/default文件中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
listen 80 default_server;
listen [::]:80 default_server;

root /var/www/html;

index index.html index.htm index.nginx-debian.html;

server_name _;

location / {
try_files $uri $uri/ =404;
}

}

  • 其中默认WEB页面路径 /var/www/html;
1
2
3
4
root@gaomu-ubantu:/var/www/html# pwd
/var/www/html
root@gaomu-ubantu:/var/www/html# ls
index.nginx-debian.html

5.修改work进程的数量

  • 通常work进程的数量与内核数量保持一致即可

  • 修改

将配置文件中的worker_processes auto; auto值改为自己想要该的worker进程数,然后重载配置即可

6.配置文件详解

  • nginx配置文件主要分为三块
    • 全局块
    • events块:网络连接的配置
    • http块
      • server块:虚拟主机
        • location块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
root@gaomu-ubantu:/etc/nginx# cat nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
worker_connections 768; # 可同时接收多少个连接
# multi_accept on;
}

http {

##
# Basic Settings
##

sendfile on;
tcp_nopush on;
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 TLSv1.3; # 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
##

include /etc/nginx/conf.d/*.conf;
# 为了让主配置文件更请求,可在conf.d目录中配置每个server块
include /etc/nginx/sites-enabled/*;
}

7.负载均衡

  • 在conf.d中添加配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
upstream backend {
ip_hash;
server 127.0.0.1:8000 weight=3;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
}
server {
listen 80;
server_name localhost;
location /app {
proxy_pass http://backend;
}
}
# 在该配置中所有的/app的请求都会被随机的代理到backend中的路径中,其中weight表示权重为3是其他服务器的三倍。

8.反向代理

  • 默认参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 可在/etc/nginx/conf.d 目录配置文件下配置
server {
#监听端口
listen 80;
listen [::]:80;
# 监听域名
server_name example.com;
# server_name _;表示所有域名访问来都使用该server进行转发

root /var/www/example.com;
# 网站根目录
index index.html;
# 首页

location / {
try_files $uri $uri/ =404;
proxy_pass http://127.0.0.1:8000/;
}
}

  • 注意: location 监听路径
  1. location和proxy_pass都末尾都加路径
1
2
3
4
5
# 该配置项会将访问/python路径的所有请求转发到 http://192.168.31.173:5000/根路径
location /python/ {
try_files $uri $uri/ =404;
proxy_pass http://192.168.31.173:5000/;
}
  1. 都不加路径
1
2
3
4
5
# 这样配置 会将访问/python路径的请求转发到 http://192.168.31.173:5000/python 路径下
location /python {
try_files $uri $uri/ =404;
proxy_pass http://192.168.31.173:5000;
}
  • 注意:从外网访问使用域名,一般通过conf.d目录创建配置文件进行添加配置,如果是本地反代,一般通过/etc/nginx/sites-enabled/default 文件进行配置

9.HTTPS协议

  • 使用openssl生成证书
1
2
3
4
5
6
# 生成私钥文件
$ openssl genrsa -out private.key 2048
# 根据私钥生成证书签名请求文件(Certificate Signing Request,简称CSR文件)
$ openssl req -new key private.key -out cert.csr
# 使用私钥对证书申请进行签名从而生成证书文件(pem文件)
$ openssl x509 -req -in cert.csr -out cacert.pem -signkey private.key
  • 第二种
1
2
3
4
5
# 这个命令会生成一个 2048 位的 RSA 私钥。私钥会被保存到 key.pem 文件中。
$ openssl genpkey -algorithm RSA -out key.pem -pkeyopt rsa_keygen_bits:2048
# 使用私钥创建一个新的自签名证书(cert.pem):
$ openssl req -new -x509 -key key.pem -out cacert.pem -days 365

  • 根据提示填写证书文件信息

  • 配置nginx配置文件/etc/nginx/sites-enabled/default

1
2
3
4
5
6
7
8
9
# SSL configuration

listen 443 ssl default_server;
listen [::]:443 ssl default_server;

# 配置证书位置
ssl_certificate /home/openssl/cacert.pem;
# 配置私钥位置
ssl_certificate_key /home/openssl/key.pem;
  • 以上方法只能获得自签名,证书可以使用certbot获得签名证书
1
2
3
4
5
6
7
8
# Ubuntu 安装 certbot:
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
# 生成证书 & 修改 Nginx 配置
$ sudo certbot --nginx
# 根据指示进行操作
# 重启 Nginx
$ sudo service nginx restart