Nginx配置详解

本文最后更新于:6 个月前

尝试做一个Nginx的配置教程,同时也是学习


Nginx配置详解


环境准备

服务器:选择了CentOS服务器7.8版本作为演示

gcc环境:使用命令安装即可

1
2
yum -y install gcc
yum -y install gcc-c++

第三方开发包

1.PERE

PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。

1
yum install -y pcre pcre-devel

2.zlib

zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。

1
yum install -y zlib zlib-devel

3.openssl

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。

1
yum install -y openssl openssl-devel

安装Nginx

两种方式获取安装包

1.进入Nginx官网下载安装包,然后上传至服务器

2.直接通过命令下载

1
2
3
4
cd /usr/local/bin
mkdir nginx
cd nignx
wget http://nginx.org/download/nginx-1.18.0.tar.gz

切换至压缩包目录进行解压

1
tar -zxvf nginx-1.18.0.tar.gz

切换至解压后文件夹目录,执行configure脚本,使用make命令进行安装

1
2
./configure
make && make install

make命令出现报错,安装依赖包

1
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc

nginx文件结构

查看nginx安装目录,进入sbin目录

1
whereis nginx

nginx基本操作

启动nginx

1
2
cd sbin/
./nginx

查看nginx启动状态

1
ps -aux | grep nginx

关闭nginx

1
./nginx -s stop

刷新配置文件

1
./nginx -s reload

nginx配置

进入配置文件夹,其中有一个nginx.conf进入

1
2
cd conf
vim nginx.conf

默认的nginx配置如下

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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#
#user nobody;
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;

sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;

#gzip on;

server {
listen 80;
server_name localhost;

#charset koi8-r;
#access_log logs/host.access.log main;

location / {
root html;
index index.html index.htm;
}

#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}

# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}

}

配置文件结构

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
...              #全局块

events { #events块
...
}

http #http块
{
... #http全局块
server #server块
{
... #server全局块
location [PATTERN] #location块
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
... #http全局块
}
  • 全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
  • events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
  • http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
  • server块:配置虚拟主机的相关参数,一个http中可以有多个server。
  • location块:配置请求的路由,以及各种页面的处理情况。

实例操作

关于防火墙

Linux一般有两个防火墙

  • firewall-cmd
  • service iptables //一般用来管理端口,默认情况下需要安装使用

查看以及禁用默认防火墙

1
2
3
4
5
6
7
8
9
10
11
12
13
# 查看默认防火墙状态
firewall-cmd --state
# 关闭防火墙
systemctl stop firewalld.service
# 禁止防火墙开机启动
systemctl disable firewalld.service

# 安装service iptables
yum install iptables-services
# 设置开机自启动
systemctl enable iptables
# 查看防火墙状态,绿色表示启动,白色表示停止状态
service iptables status

添加端口号访问,保存配置重启

1
2
3
4
5
6
7
vim /etc/sysconfig/iptables
# 开启web服务端口
iptables -A OUTPUT -p tcp --sport 8080 -j ACCEPT
# 查看开启端口
iptables -L -n
service iptables save
service iptables restart

反向代理

举个栗子

编辑nginx.conf文件

1
2
3
4
5
6
7
8
9
10
server {
listen 80; #访问192.168.17.129的80端口
server_name 192.168.17.129;

location / {
root html;
index index.html index.htm;
proxy_pass http://127.0.0.1:8080 #跳转路径
}
}

Nginx配置文件结构引自Nginx 配置详解 | 菜鸟教程


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载先请联系作者且注明出处!