0
点赞
收藏
分享

微信扫一扫

Nginx基本配置

暮晨夜雪 2023-04-28 阅读 71

文章目录


本教程讲述Nginx的基本配置和操作。首先需要安装 Nginx,关关于具体的安装方式,可以参见Nginx简介与安装一文。为了方便,这里基于CentOS 7的官方Docker镜像来说明,你也可以使用你熟悉的任意Linux发行版。

准备环境

使用的Dockerfile如下:

FROM centos:7

RUN yum update -y

RUN yum install wget gcc pcre-devel zlib-devel -y

构建镜像:

docker build -t centos7-nginx-demo:local -f Dockerfile .

交互式运行镜像:

docker run -p 80:80 -it centos7-nginx-demo:local bash

这里便进入到了一个运行有CentOS7的Docker容器内部:

[root@b1aa50b94e9b /]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (AltArch)

安装Nginx

首先创建一个文件/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

执行安装命令:

yum install nginx -y

成功后可以看到安装位置及版本:

[root@b1aa50b94e9b yum.repos.d]# which nginx
/usr/sbin/nginx
[root@b1aa50b94e9b yum.repos.d]# nginx -version
nginx version: nginx/1.24.0

Nginx配置

初始配置信息

Nginx的默认配置是在/etc/nginx目录下的:

[root@b1aa50b94e9b nginx]# pwd
/etc/nginx
[root@b1aa50b94e9b nginx]# ll
total 28
drwxr-xr-x 2 root root 4096 Apr 26 14:57 conf.d
-rw-r--r-- 1 root root 1007 Apr 11 17:22 fastcgi_params
-rw-r--r-- 1 root root 5349 Apr 11 17:22 mime.types
lrwxrwxrwx 1 root root   29 Apr 26 14:57 modules -> ../../usr/lib64/nginx/modules
-rw-r--r-- 1 root root  648 Apr 11 17:21 nginx.conf
-rw-r--r-- 1 root root  636 Apr 11 17:22 scgi_params
-rw-r--r-- 1 root root  664 Apr 11 17:22 uwsgi_params

nginx.conf是默认配置文件,我们先看一下它的默认初始内容:

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

其中,include /etc/nginx/conf.d/*.conf;这一行又引入了其他配置文件,默认情况下只有一个:/etc/nginx/conf.d/default.conf

server {
    listen       80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/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   /usr/share/nginx/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;
    #}
}

default.conf 里配置了一个 server 块,监听的是 localhost80端口。

配置详解

通过 include 命令引入的配置,与直接写在主配置文件 nginx.conf 内的效果是一样的,分开写的好处是模块化更易于后期维护更新。以上两个配置文件合在一起的效果如下:

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #access_log  /var/log/nginx/host.access.log  main;

        location / {
            root   /usr/share/nginx/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   /usr/share/nginx/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;
        #}
    }
}

1. 全局块

从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。比如上面第一行的配置:

worker_processes 1;

这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。

2. events 块

比如上面的配置:

events {
    worker_connections  1024;
}

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 worker process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 worker process 可以同时支持的最大连接数等。上述例子就表示每个 worker process 支持的最大连接数为 1024 这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

3. http 块

这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:http 块也可以包括 http 全局块 和 server 块。

3.1 http 全局块

http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

3.2 server 块

这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。

3.2.1 全局 server 块

最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。

3.2.2 location 块

一个 server 块可以配置多个 location 块。这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓
存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

启动Nginx

直接启动:

nginx

如果启动成功,浏览器打开 locahost:80,能看到 Nginx 的默认欢迎页面。

Nginx默认欢迎页面

实际使用过程中,一般会通过如下方式,来配置 Nginx 开机自启动(如果上面已经启动了 Nginx,需要先停掉):

systemctl enable nginx

便可以通过如下命令来操作 Nginx

# 取消开机自启动
systemctl disable nginx

# 启动 
systemctl start nginx

# 查看状态
systemctl status nginx

# 重新加载配置
systemctl reload nginx

# 重启
systemctl restart nginx

# 停止
systemctl stop nginx

参考资料

  1. nginx: Linux packages
举报

相关推荐

0 条评论