Nginx配置

一. 摘要

下面的内容均是根据经验而写,没有参考官方文档,少部分内容也未曾测试,难免会很不严谨或者有错的地方,以后慢慢补充,官方文档以后再看~

二. 配置

1. 配置要点

用户:

可以是系统内的任一用户,但由于权限问题,不要使用权限过高的用户(很危险),权限过低的用户(应该是这个问题)会造成访问不了页面;

 

server

每一个server是一个监听点:

  • default_server:当所有监听同一个端口的serverserver_name都匹配不上的时候,就会选定是default_server,通常用来处理泛解析带来的域名回收处理;如果没有显式定义default_server的时候,就会默认是第一个server

  • listen:监听的端口;

  • root:该server的根目录;

  • location:路径,location后面的路径(支持正则表达式)就会替换成花括号里面的路径(但前面要有root),如

  上面的/image/将会去/usr/share/web/NetDisk/找,其中的root应该就是花括号上面的root一样(但没测试过);

  • error_page:错误页面;

2. ssl证书配置

基本上和普通的server配置差不多,就是需要加上证书和密钥的位置;

(注:文件的放置位置最好和默认的一样,那才是标准的位置)

3. 代理

nginx本身就是一款高性能的反向代理服务器,个人比较喜欢使用80端口代理其他不同端口的站点

 proxy_pass反向代理本地http
  • 一共需要两个server

  • 先加上端口的监听的server

  • 在另一个端口的server常规配置就行

 proxy_pass反向代理本地https
  • 和上面的代理http差不多,但需要注意的是,监听的并代理的server必须加上证书与协议相关的参数,否则TLS服务将无法使用,网页访问不了:

上面是对本地4430端口的反向代理,4430端口访问的站点也是https协议,代理的时候可以用https://127.0.0.1:4430也可以用http://127.0.0.1:4430(对应的部署使用对应的协议),因此最好将4430端口的站点部署为http,用http进行访问(个人觉得这样可能这样性能会高一些,因为https要加密,所有应该是必然的),因为本身客户端通过443访问的时候已经使用了https,因此这里不用担心安全性问题,但是如果你担心4430端口的站点被用户直接用http协议访问,也可以将4430端口的站点部署为https或者使用以下方法:增加一个4430端口的httpserverserver_name设为127.0.0.1,另一个server保持为https,这样反向代理用的是http://127.0.0.1:4430,就会走http,而通过http直接访问4430端口的将会提示网关错误(使用的协议错误)

 rewrite重定向
  • 在需要重定向的server里加上下面的代码就行:

  一般用于http自动跳转到https,其他的用途也行;

4.配置PHP服务

三. 总结

1. 注意事项

  • 如果添加的sever太多的话,就会出现这样的错误:

  解决方法:server_names_hash_bucket_size 64;

  • 如果使用的SSL证书绑定的域名和访问的域名不一样的话,浏览器就会出现证书错误或者证书不受信任的提示,这时候需要为访问的域名申请一个证书(有免费的),在该站点的server里进行添加;
  • 如果使用反向代理proxy_pass,文件传输速度将会严重下降(虽然代理是127.0.0.1,数据应该不会转出服务器,感觉是出了外网然后再回来,就相当于在服务器访问4431端口站点4431端口将数据发出公网然后444端口接收回来,444端口再将数据发给客户端,可能真的是这样,毕竟网页的样式表文件什么我习惯用127.0.0.1,但客户端访问并没问题,所以这里的127.0.0.1可能有点不一样。说是这样说,但是从路由器的设备监控来看(服务器其实是一台手机),发出公网的数据就只有一份而已,也就是代理的数据并不会出公网,下图)左图是直接利用端口访问,右图是使用反向代理:

 

 

  •  nginx的项目部署:

  1. 配置文件头顶的user需要更改为服务器里存在的用户,否则网页无法访问;部署前记得将原来的注释掉;

  2. 可以在server外进行部署,或者在location的大括号里,但是必须是:“root 项目路径 html 网页文件这样的两行格式,这样的格式,不能直接为“root 网页文件全路径这样的一行格式;

  3. 每一个sever都是一个站点;

  4. 如果想要端口代理的话,则一个端口需要两个server,一个是80端口监听域名代理,另一个是真正的端口对应的站点;

2.总结

上面的都是我日常的总结,其实我并没有真正部署过什么项目,都是平时乱搞的,有问题都是百度的,然后根据自己的总结写出上面的配置,所以并没有真正参考过官方文档,应该上面的配置会很不严谨,所以建议大家看官方文档。

 

示例:

 

复制代码
1 # For more information on configuration, see: 2 # * Official English Documentation: http://nginx.org/en/docs/ 3 # * Official Russian Documentation: http://nginx.org/ru/docs/ 4 5 user MengZB; 6 worker_processes auto; 7 error_log /var/log/nginx/error.log; 8 pid /run/nginx.pid; 9 10 # Load dynamic modules. See /usr/share/nginx/README.dynamic. 11 include /usr/share/nginx/modules/*.conf; 12 13 events { 14 worker_connections 1024; 15 } 16 17 http { 18 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 19 '$status $body_bytes_sent "$http_referer" ' 20 '"$http_user_agent" "$http_x_forwarded_for"'; 21 22 access_log /var/log/nginx/access.log main; 23 24 sendfile on; 25 tcp_nopush on; 26 tcp_nodelay on; 27 keepalive_timeout 65; 28 types_hash_max_size 2048; 29 30 include /etc/nginx/mime.types; 31 default_type application/octet-stream; 32 33 # Load modular configuration files from the /etc/nginx/conf.d directory. 34 # See http://nginx.org/en/docs/ngx_core_module.html#include 35 # for more information. 36 include /etc/nginx/conf.d/*.conf; 37 38 #如果添加的server太多,必须在http的花括号里面添加下面这段代码, 39 #如果还不够的话后面的数字继续往上加 40 server_names_hash_bucket_size 64; 41 42 43 #下面用于http代理的server都是监听81端口,宽带的80端口被封了 44 45 #监听81端口,代理域名为mzb.cxyngu.com的站点(没部署东西,目前就是用来玩的,部署的话最好用https,http不安全) 46 server { 47 listen 81; #default_server; 48 listen [::]:81; # default_server; 49 # server_name _; 50 server_name mzb.cxyngu.com; 51 # root /usr/share/nginx/html; 52 # Load configuration files for the default server block. 53 include /etc/nginx/default.d/*.conf; 54 55 location / { 56 proxy_pass http://127.0.0.1:82;#代理82端口的站点,即对外界来看mzb.cxyngu.com的网站就是82端口的站点 57 } 58 59 error_page 404 /404.html; 60 location = /40x.html { 61 } 62 63 error_page 500 502 503 504 /50x.html; 64 location = /50x.html { 65 } 66 } 67 68 #监听81端口,将所有除mzb记录外的cxyngu.com的http解析都重定向到https 69 70 server { 71 72 #default_server 的作用就是如果server_name都匹配不上,那么就会是default_server; 73 74 listen 81 default_server; 75 listen [::]:81 default_server; 76 # server_name _; 77 server_name *.cxyngu.com;#使用泛解析 78 root /usr/share/nginx/html; 79 # rewrite ^(.*) https://home.cxyngu.com:444/ permanent; #自动跳到https 80 rewrite ^(.*) http://webdisk.cxyngu.com/ permanent;#将访问重定向到https,这里的webdisk.cxyngu.com是我在阿里云域名解析那里添加的隐式解析,解析到的是https://home.cxyngu.com:444 81 # Load configuration files for the default server block. 82 include /etc/nginx/default.d/*.conf; 83 84 location / { 85 } 86 87 error_page 404 /404.html; 88 location = /40x.html { 89 } 90 91 error_page 500 502 503 504 /50x.html; 92 location = /50x.html { 93 } 94 } 95 96 server{ 97 listen 82; 98 # root /usr/share/web/temp/; 99 100 location /{ 101 root /usr/share/web/temp/; 102 index Theme.html; 103 } 104 error_page 404 /404.html; 105 location = /40x.html { 106 } 107 108 error_page 500 502 503 504 /50x.html; 109 location = /50x.html { 110 } 111 } 112 113 #Settings for a TLS enabled server. 114 #下面全用444端口进行https监听,因为宽带的443、445端口都被封了 115 116 #监听的并代理的https的server必须加上证书与协议相关的参数,否则TLS服务将无法使用,网页访问不了(目前测试是这样) 117 118 #监听444端口,代理域名www.cxyngu.com 119 server { 120 listen 444 ssl default_server; 121 listen [::]:444 ssl default_server; 122 server_name www.cxyngu.com cxyngu.com; 123 # Load configuration files for the default server block. 124 include /etc/nginx/default.d/*.conf; 125 126 #证书文件 127 ssl_certificate "/etc/pki/nginx/www.cxyngu.com_bundle.crt"; 128 ssl_certificate_key "/etc/pki/nginx/private/www.cxyngu.com.key"; 129 ssl_session_cache shared:SSL:1m; 130 ssl_session_timeout 10m; 131 ssl_ciphers HIGH:!aNULL:!MD5; 132 ssl_prefer_server_ciphers on; 133 134 # Load configuration files for the default server block. 135 include /etc/nginx/default.d/*.conf; 136 location / { 137 138 proxy_pass https://127.0.0.1:4430;#反向代理到4430端口 139 140 #测试:观察能否访问B站(结果是可以) 141 #proxy_pass https://bilibili.com; 142 } 143 144 error_page 404 /404.html; 145 location = /40x.html { 146 } 147 148 error_page 500 502 503 504 /50x.html; 149 location = /50x.html { 150 } 151 } 152 #监听444端口,代理域名home.cxyngu.com 153 server { 154 listen 444 ssl; 155 listen [::]:444 ssl; 156 server_name home.cxyngu.com; 157 158 ssl_certificate "/etc/pki/nginx/home.cxyngu.com.pem"; 159 ssl_certificate_key "/etc/pki/nginx/private/home.cxyngu.com.key"; 160 ssl_session_cache shared:SSL:1m; 161 ssl_session_timeout 10m; 162 ssl_ciphers HIGH:!aNULL:!MD5; 163 ssl_prefer_server_ciphers on; 164 165 # Load configuration files for the default server block. 166 include /etc/nginx/default.d/*.conf; 167 168 location / { 169 proxy_pass https://127.0.0.1:4431;#反向代理到4431端口 170 } 171 172 error_page 404 /404.html; 173 location = /40x.html { 174 } 175 176 error_page 500 502 503 504 /50x.html; 177 location = /50x.html { 178 } 179 } 180 181 #域名cxyngu.com、www.cxyngu.com的站点(还没想好部署什么网站,还没部署完,等部署的时候参考下面的home.cxyngu.com的部署) 182 server { 183 listen 4430 ssl http2 default_server; 184 listen [::]:4430 ssl http2 default_server; 185 server_name cxyngu.com www.cxyngu.com; 186 # root /usr/share/nginx/html; 187 #证书文件 188 ssl_certificate "/etc/pki/nginx/www.cxyngu.com_bundle.crt"; 189 ssl_certificate_key "/etc/pki/nginx/private/www.cxyngu.com.key"; 190 ssl_session_cache shared:SSL:1m; 191 ssl_session_timeout 10m; 192 ssl_ciphers HIGH:!aNULL:!MD5; 193 ssl_prefer_server_ciphers on; 194 195 # Load configuration files for the default server block. 196 include /etc/nginx/default.d/*.conf; 197 198 location / { 199 root /usr/share/web/NetDisk/; 200 index index.html; 201 } 202 203 error_page 404 /404.html; 204 location = /40x.html { 205 } 206 207 error_page 500 502 503 504 /50x.html; 208 location = /50x.html { 209 } 210 } 211 212 213 #域名home.cxyngu.com的站点(打算用于部署网盘) 214 215 #可直接访问的4431端口的server,目的是防止用户直接使用443端口进行访问 216 217 server { 218 listen 4431 ssl http2 default_server; 219 listen [::]:4431 ssl http2 default_server; 220 server_name home.cxyngu.com; 221 #证书文件 222 ssl_certificate "/etc/pki/nginx/home.cxyngu.com.pem"; 223 ssl_certificate_key "/etc/pki/nginx/private/home.cxyngu.com.key"; 224 ssl_session_cache shared:SSL:1m; 225 ssl_session_timeout 10m; 226 ssl_ciphers HIGH:!aNULL:!MD5; 227 ssl_prefer_server_ciphers on; 228 229 # Load configuration files for the default server block. 230 include /etc/nginx/default.d/*.conf; 231 232 location / { 233 root /usr/share/web/NetDisk/; 234 index index.html; 235 #或者:(但是再用代理的话可能又会增加服务器负担,因此这里直接部署) 236 # proxy_pass http://127.0.0.1:4431 237 } 238 239 error_page 404 /404.html; 240 location = /40x.html { 241 } 242 243 error_page 500 502 503 504 /50x.html; 244 location = /50x.html { 245 } 246 } 247 #特地增加一个http的server用于服务器本地的反向代理(不用https,防止降低性能) 248 server { 249 listen 4431; #http2 default_server; 250 listen [::]:4431; #http2 default_server; 251 server_name 127.0.0.1; 252 #证书文件 253 # Load configuration files for the default server block. 254 include /etc/nginx/default.d/*.conf; 255 256 location / { 257 # root /usr/share/web/NetDisk/; 258 # index index.html; 259 root /usr/share/web/temp/; 260 index Theme.html; 261 } 262 263 error_page 404 /404.html; 264 location = /40x.html { 265 } 266 267 error_page 500 502 503 504 /50x.html; 268 location = /50x.html { 269 } 270 } 271 }
复制代码

 

posted @   小贼的自由  阅读(787)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示