本文最后更新于 2023-08-19,文章内容可能已经过时,请注意文章发布时间.

Nginx的基础安装与使用

安装:本文提供三种安装方式

一.包管理器

#Linux端

sudo apt update
sudo apt install nginx

Windows端

scoop install nginx
choco install nginx

Mac端

brew install nginx

二.编译安装

./configure
	--sbin-path=/usr/local/nginx/nginx
	--conf-path=/usr/local/nigin/nginx.conf
	--pid-path=/usr/local/nginx/nginx.pid
	--with-http_ssl_module
	--with-pcre=../pcre2-10.39
	--with-zlib=../zlib-1.2.11
make
make install

三.Docker安装

  1. 先安装Docker

  2. 拉取镜像

    docker pull nginx
    
  3. 运行 Docker 运行 --容器名称 -端口映射 -d 守护进程 镜像名称

    docker run --name nginx -p 80:80 -d nginx
    

    建议从80映射到80,若有证书,建议443映射到443,格式:真机端口:容器端口

nginx的Docker镜像没有任何文本编辑器,因此修改配置文件需要如下操作:

#从容器中复制出配置文件,容器名为my-nginx
docker cp my-nginx:/etc/nginx/nginx.conf nginx.conf
#使用真机安装的任意文本编辑器编辑配置文件
vim nginx.conf
#编辑完毕后,将配置文件复制回容器
docker nginx.conf cp my-nginx:/etc/nginx/nginx.conf
#重新载入配置
docker restart my-nginx

反向代理的启动与停止

本文仅提供了真机安装的简单使用,Docker安装需要进入容器内操作,在cp配置文件到容器外编辑,但配置文件格式内容并无不同.

启动

执行如下代码:

nginx

如果后台没有出现任何反馈,表明服务成功启动.

如果出现了错误提示,则请根据对应的错误提示排查和解决问题.

通过本机浏览器访问localhost(如果有图形界面的话)或者通过另一设备的浏览器访问安装了Nginx的主机的IP地址,如果能够看到Nginx的欢迎界面,表示服务启动成功

查看Nginx的进程

输入如下命令:

ps -ef|grep nginx

结果:

root     2882259       1  0 15:08 ?        00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 2882260 2882259  0 15:08 ?        00:00:00 nginx: worker process
www-data 2882261 2882259  0 15:08 ?        00:00:00 nginx: worker process
root     2882363 2880133  0 15:08 pts/0    00:00:00 grep --color=auto nginx

其中:

master进程负责读取并验证配置文件,并管理worker进程

worker进程是工作进程

或通过查看占用了80端口的程序,即Nginx

lsof -i:80

结果:

COMMAND       PID     USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
AliYunDun 2048172     root   10u  IPv4 31044282      0t0  TCP iZ2ze9rq488bo8yy6t9ka0Z:50048->100.100.30.25:http (ESTABLISHED)
nginx     2882259     root    6u  IPv4 31062218      0t0  TCP *:http (LISTEN)
nginx     2882259     root    7u  IPv6 31062219      0t0  TCP *:http (LISTEN)
nginx     2882260 www-data    6u  IPv4 31062218      0t0  TCP *:http (LISTEN)
nginx     2882260 www-data    7u  IPv6 31062219      0t0  TCP *:http (LISTEN)
nginx     2882261 www-data    6u  IPv4 31062218      0t0  TCP *:http (LISTEN)
nginx     2882261 www-data    7u  IPv6 31062219      0t0  TCP *:http (LISTEN)

Nginx重载配置文件/停止

通过命令:

nginx -s 指令

其中指令可能是

优雅停止立即停止重载配置重新打开日志
quitstopreloadreopen

例如

nginx -s quit

配置文件填写

1.找到配置文件

以下命令可以看到Nginx的一些信息,包括安装目录,编译参数,配置文件路径等.

nginx -V

根据输出结果中的conf_path的值,可以确定Nginx的配置文件路径,操作系统不同位置不同.

2.修改配置文件

在Ubuntu中,配置文件位置为/etc/nginx/nginx.conf

据此:

vi /etc/nginx/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;
	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 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;
	include /etc/nginx/sites-enabled/*;
	server {
    listen 80;
    server_name http://xxxxxx.com; #你的域名
	#下面的配置是页面路由,可以配置静态网页,也可以配置服务端口
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

}


#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;
#	}
#}

配置文件基本构成:

Nginx配置文件主要分为四部分:

(1)main: 全局配置,配置比较宏观的参数,例如 worker线程数量;

(2)events: 顾名思义,事件,用以配置服务器与用户连接之间的参数,比如并发连接数等;

(3)http: 最常用的http协议服务,配置路由,域名证书等.还有电子邮件相关功能.;

(4)server: 位于http配置的内部,用以配置具体的路, 其中listen指定监听的端口号,http默认端口号为443,server_name指定主机名;location用于指定主机上的资源位置。

请求转发功能实例配置文件,配有SSL证书

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;
	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 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;
	include /etc/nginx/sites-enabled/*;
	server {
    listen 443 ssl;
    server_name saltfish.club; #你的域名
	ssl_certificate /etc/nginx/SSL/certificate.crt;#证书路径
	ssl_certificate_key /etc/nginx/SSL/private.key;#秘钥路径,pem可直转key
	ssl_session_timeout 5m;#超时时间
	#请按照以下协议配置
    ssl_protocols TLSv1.2 TLSv1.3; #不懂,TODO
    #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; #不懂,TODO
    ssl_prefer_server_ciphers on;#不懂,TODO
	#下面的配置是页面路由,可以配置静态网页,也可以配置服务端口
    location / {#即空域名,不带后缀
        proxy_pass http://127.0.0.1:8090;#目标端口,可设置多服务器集群
        proxy_set_header Host $host;#请求头,表示转发真实请求头
        proxy_set_header X-Real-IP $remote_addr;#表示转发真实IP
    }
}

}


#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;
#	}
#}

本文仅演示Nginx的基础使用,需要深究请移步:死磕Nginx系列