Nginx的作用

Nginx是一款高性能的Web服务器和反向代理服务器,其主要作用如下:

  • 提供Web服务器功能:Nginx可以作为静态或动态内容的Web服务器,为Web应用程序提供服务。它可以处理静态文件和动态请求,支持FastCGI、uWSGI、SCGI和WSGI等协议,并提供缓存和压缩等功能。

  • 反向代理服务器:Nginx还可以作为反向代理服务器,用于将请求转发到后端服务器(如应用服务器、数据库服务器等),并将响应返回给客户端。反向代理可以提高Web应用程序的可靠性、安全性和可扩展性。

  • 负载均衡器:Nginx可以作为负载均衡器,将请求分发到多个后端服务器,以提高Web应用程序的性能和可扩展性。

  • HTTPS代理服务器:Nginx还可以作为HTTPS代理服务器,用于为后端服务器提供SSL/TLS加密功能,保护Web应用程序的安全性。

总之,Nginx是一个灵活、高效、可靠的Web服务器和反向代理服务器,具有处理大量并发连接和高负载的能力,被广泛用于Web应用程序的部署和扩展。

nginx配置文件简介

Nginx配置文件通常在 `/etc/nginx/`下, 常见文件组织结构如下:

/etc/nginx/
├── conf.d
├── fastcgi.conf
├── fastcgi_params
├── koi-utf
├── koi-win
├── mime.types
├── modules-available
├── modules-enabled
├── nginx.conf // 顶层配置文件,包括worker,log位置等
├── proxy_params
├── scgi_params
├── sites-available
│   ├── default
│   └── starriest.top
├── sites-enabled // 启用的sites
│   └── starriest.top
├── snippets
│   ├── fastcgi-php.conf
│   └── snakeoil.conf
├── uwsgi_params
└── win-utf

可以查看/etc/nginx/sites-enabled/default文件,进行配置

ngxin log一般在/var/log/nginx/access.log和/var/log/nginx/error.log中

默认nginx配置文件解读

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# In most cases, administrators will remove this file from sites-enabled/ and
# leave it as reference inside of sites-available where it will continue to be
# updated by the nginx packaging team.
#
# This file will automatically load configuration files provided by other
# applications, such as Drupal or Wordpress. These applications will be made
# available underneath a path with that package name, such as /drupal8.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
server {
	listen 80 default_server;
	listen [::]:80 default_server;

	# SSL configuration
	#
	# listen 443 ssl default_server;
	# listen [::]:443 ssl default_server;
	#
	# Note: You should disable gzip for SSL traffic.
	# See: https://bugs.debian.org/773332
	#
	# Read up on ssl_ciphers to ensure a secure configuration.
	# See: https://bugs.debian.org/765782
	#
	# Self signed certs generated by the ssl-cert package
	# Don't use them in a production server!
	#
	# include snippets/snakeoil.conf;

	root /var/www/html;

	# Add index.php to the list if you are using PHP
	index index.html index.htm index.nginx-debian.html;

	server_name _;

	location / {
		# First attempt to serve request as file, then
		# as directory, then fall back to displaying a 404.
		try_files $uri $uri/ =404;
	}

	# pass PHP scripts to FastCGI server
	#
	#location ~ \.php$ {
	#	include snippets/fastcgi-php.conf;
	#
	#	# With php-fpm (or other unix sockets):
	#	fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
	#	# With php-cgi (or other tcp sockets):
	#	fastcgi_pass 127.0.0.1:9000;
	#}

	# deny access to .htaccess files, if Apache's document root
	# concurs with nginx's one
	#
	#location ~ /\.ht {
	#	deny all;
	#}
}


# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
#	listen 80;
#	listen [::]:80;
#
#	server_name example.com;
#
#	root /var/www/example.com;
#	index index.html;
#
#	location / {
#		try_files $uri $uri/ =404;
#	}
#}
  1. server定义了一个server block, 可以处理对应端口接受到的请求, 并进行相应返回。

  2. nginx会根据server_name和请求Header中的host选择匹配到哪个具体的server block, 如果server_name是_的话,那么没有被匹配到请求就会被转发到此server.

  3. listen定义了server对应的端口,如果是default_server的话,那么该端口下没有被server_name匹配的请求会被转发到该defult server, 无论default server的server_name是否是_,一个端口只能有一个default server, 如果没有指定default server, 那么按照顺序,第一个server会被作为defualt server.

  4. index 默认情况下,nginx的index指令的值为`index.html index.htm`。这意味着当客户端请求一个目录时,Nginx将首先检查该目录下是否存在index.html文件,如果不存在,则继续检查是否存在index.htm文件。如果两个文件都不存在,则Nginx将返回目录列表或403 Forbidden错误。

  5. location

Nginx配置TLS协议(启用HTTPS)

要在Nginx中启用SSL加密,需要执行以下步骤:

  1. 为服务器获取SSL证书:您需要从信任的证书颁发机构(CA, 例如ZeroSSL)购买SSL证书,或使用自签名证书来启用SSL。这通常需要指定域名和服务器的详细信息。 利用acme.sh可以定期更新证书.

  2. 将SSL证书文件和私钥文件放置在服务器上:您需要将证书文件(通常是.crt格式)和私钥文件(通常是.key格式)放置在服务器上的安全位置。

  3. 配置Nginx以使用SSL:在Nginx的server块中,添加以下配置来启用SSL:

    server {
        listen       443 ssl;
        server_name  example.com;
        ssl_certificate      /path/to/certificate.crt;
        ssl_certificate_key  /path/to/private.key;
        ...
    }
    这将使Nginx监听HTTPS的443端口,并使用指定的证书和私钥文件进行SSL加密。
  4. 重新加载Nginx配置:在更改Nginx配置后,需要重新加载Nginx以使其生效。您可以使用以下命令重新加载Nginx:

sudo systemctl reload nginx

如果配置存在错误,则使用以下命令检查错误: sudo nginx -t 如果检查结果没有错误,可以重新加载Nginx。

可能的问题

  1. 服务器提供商使用了防火墙,使用`telnet host port`查看是否可以连接

  2. 大陆封禁了443端口的流量(可能)