家宽服务器+低配公网IP服务器稳定运行方案之优化篇
目前搭建的家宽服务器已经稳定使用了几个月，虽然中间有点小波折，但是经过不断地优化，抗住的无论是流量还是并发都没太大问题之前的方案请查看这篇文章 https://www.bzqll.com/2023/09/370.html优化内容由于公网IP的服务器装的是宝塔，然而宝塔又有API接口，所以索性就直接调用宝塔的API来进行更新代理需要注意的是： 因为宝塔的API必须要开启白名单IP才可以操作，但是家宽的IP是会变化的，不然是无法请求云服务的宝塔接口的但公网IP是不变的，所以我们直接利用云服务器的本地IP 127.0.0.1来进行更新配置最后直接在宝塔API的白名单中把云服务器IP和127.0.0.1加入白名单即可。对应的PHP代码：<?php class bt_api { private $BT_KEY = "xxxxxxxxx"; //接口密钥 private $BT_PANEL = "http://127.0.0.1:8888"; //面板地址 //如果希望多台面板，可以在实例化对象时，将面板地址与密钥传入 public function __construct($bt_panel = null,$bt_key = null){ if($bt_panel) $this->BT_PANEL = $bt_panel; if($bt_key) $this->BT_KEY = $bt_key; } //示例取面板日志 public function GetLogs(){ //拼接URL地址 $url = $this->BT_PANEL.'/data?action=getData'; //准备POST数据 $p_data = $this->GetKeyData(); //取签名 $p_data['table'] = 'logs'; $p_data['limit'] = 10; $p_data['tojs'] = 'test'; //请求面板接口 $result = $this->HttpPostCookie($url,$p_data); //解析JSON数据 $data = json_decode($result,true); return $data; } //获取网站反向代理配置文件 public function GetWebProxyConf($proxy_name,$domain){ //拼接URL地址 $url = $this->BT_PANEL.'/files?action=GetFileBody'; //准备POST数据 $p_data = $this->GetKeyData(); //取签名 $p_data['path'] = '/www/server/panel/vhost/nginx/proxy/'.$domain.'/'.md5($proxy_name).'_'.$domain.'.conf'; //请求面板接口 $result = $this->HttpPostCookie($url,$p_data); //解析JSON数据 $data = json_decode($result,true); return $data; } //更新网站反向代理配置文件 public function SetWebProxyConf($proxy_name,$domain,$data){ //拼接URL地址 $url = $this->BT_PANEL.'/files?action=SaveFileBody'; //准备POST数据 $p_data = $this->GetKeyData(); //取签名 $p_data['path'] = '/www/server/panel/vhost/nginx/proxy/'.$domain.'/'.md5($proxy_name).'_'.$domain.'.conf'; $p_data['data'] = $data; $p_data['encoding'] = 'utf-8'; //请求面板接口 $result = $this->HttpPostCookie($url,$p_data); //解析JSON数据 $data = json_decode($result,true); return $data; } /** * 构造带有签名的关联数组 */ private function GetKeyData(){ $now_time = time(); $p_data = array( 'request_token' => md5($now_time.''.md5($this->BT_KEY)), 'request_time' => $now_time ); return $p_data; } /** * 发起POST请求 * @param String $url 目标网填，带http:// * @param Array|String $data 欲提交的数据 * @return string */ private function HttpPostCookie($url, $data,$timeout = 60) { //定义cookie保存位置 $cookie_file='./'.md5($this->BT_PANEL).'.cookie'; if(!file_exists($cookie_file)){ $fp = fopen($cookie_file,'w+'); fclose($fp); } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $output = curl_exec($ch); curl_close($ch); return $output; } } //实例化对象 $api = new bt_api(); // 执行动作 $key = $_GET['key']; // 更新的IP $ip = $_GET['ip']; header('Content-Type: application/json'); // 更新配置 if ($key == 'nginx_update') { if(empty($ip)){ echo '{"status":false,"msg":"参数缺失"}'; return; } //获取配置文件 $res_json = $api->GetWebProxyConf('反向代理名称','域名'); // 获取配置文件内容 $proxy_conf = $res_json['data']; // 正则 $pattern = '/proxy_pass http:\/\/(.*?);/i'; // 进行匹配 preg_match($pattern,$proxy_conf, $matches); // 替换内容 $proxy_conf = str_replace('http://'.$matches[1],'http://'.$ip,$proxy_conf); // 使用替换以后得内容进行更新 并返回 echo json_encode($api->SetWebProxyConf('反向代理名称','域名',$proxy_conf)); return; }else if ($key == 'nginx_get') { echo json_encode($api->GetWebProxyConf('反向代理名称','域名')); return; } echo '{"status":false,"msg":"error"}'; return; ?>参数说明$proxy_name 宝塔新建反向代理时填写的名称$domain 你需要代理的网站域名最终的反向代理文件名称为代理名称MD5后+_+域名+.conf最后只需要修改在你本地检测IP是否变化的逻辑中判断php文件返回的status是否为true即可
高配置家宽服务器+低配公网IP服务器稳定运行方案
先上图，再说具体的内容一直都在用腾讯云的机器，当时候也有优惠力度比较大活动，就买了一台4核16G内存的云服务器，因为自己做了一些APP啥的，这个配置也能带动需要用的服务，就用了2年左右吧，但是现在快到期了，续费又太贵了，也没有什么类似配置的活动了，直接买同规格的更买不起了，发愁的狠。后来就想到了家里弄一台本地服务器，正好有个公网IP，于是说干就干，前面的 铭凡X500+5600G迷你主机搭建PVE+爱快+CentOS+网心云 这篇文章就是组的本地服务器的配置，加上网心云的收益正好抵了电费，就很划算。因为用的东西比较多，此处记录下来方便以后维护使用准备内容能够装的爱快软路由家庭服务器公网IP服务器（随便一台即可，能装Nginx和PHP就行）访问逻辑分为两部分，一部分是内部业务程序主动检测IP进行上报公网IP服务器，另一部分时客户端访问服务器端的逻辑1. 定时任务在自己业务程序中增加一个定时任务，然后每隔三秒调用一次爱快的获取拨号IP的接口。爱快登录后并获取拨号IP的接口请求内容如下请求地址：http://192.168.123.1/Action/login , 此处的192.168.123.1为爱快的LAN地址，其实就是登录页面地址http请求内容：POST /Action/login HTTP/1.1 Host: 192.168.123.1 Content-Type: application/json Content-Length: 129 {"username":"mrdong916","passwd":"6bbb75c7756b86ec9f69a8fb3ed46110","pass":"c2FsdF8xMURvbmczOTQzOTRA","remember_password":"true"}passwd的计算逻辑：登录密码MD5后小写pass的计算逻辑：salt_11+MD5后的密码进行Base64登录后返回头中会返回一个Cookie，保存此Cookie即可然后使用Cookie获取PPPOE拨号信息POST /Action/call HTTP/1.1 Host: 192.168.123.1 Cookie: sess_key=6769ac2fae1be461c19dae8af8f62e36; Content-Type: application/json Content-Length: 68 {"func_name":"wan","action":"show","param":{"id":"1","TYPE":"data"}}获取到的信息如下{ "Result": 30000, "ErrMsg": "Success", "Data": { "data": [ { "pppoe_ip_addr": "222.xxx.xxx.125", "pppoe_netmask": "255.255.255.255", "pppoe_gateway": "222.xxx.xxx.1", "pppoe_updatetime": 1695151198, "pppoe_dns1": "202.xxx.xxx.68", "pppoe_dns2": "202.xxx.xxx.68", "pppoe_macremote": "14:23:0a:a5:49:4e", "dhcp_ip_addr": "", "dhcp_netmask": "", "dhcp_gateway": "", "dhcp_updatetime": 0, "dhcp_dns1": "", "dhcp_dns2": "", "dhcp_lease": 0, "bandmode": 0, "internet": 2, "mac": "", "speed": 0, "duplex": 0, "upload": 0, "download": 0, "qos_upload": 512000, "qos_download": 5120000, "vendorclass": "", "clientid": "", "hostname": "", "opt_type12": 0, "opt_type60": 0, "opt_type61": 0, "wifi_wisp": 1, "wifi_bssid": "", "wifi_ssid": "", "wifi_psk": "", "ip_mask": "", "gateway": "", "username": "03xxxxxxxx38", "passwd": "123456", "timing_rst_switch": 0, "timing_rst_week": "1234567", "timing_rst_time": "12:00", "cycle_rst_time": 0, "pppoe_service": "", "pppoe_ac": "", "mtu": 1480, "mru": 1480, "default_route": 1, "disc_auto_switch": 0, "link_time": "00:00-23:59", "check_link_mode": 3, "check_link_host": "www.baidu.com", "qos_switch": 1, "enable_ipv6": 0, "linkmode": 0, "policy": 1, "lte_service": "umts_gprs", "lte_mode": "auto", "lte_apn": "3gnet", "lte_dialnum": "*99#", "lte_pincode": "", "lte_antenna_switch": 0, "pppoe_ass_switch": 1, "ass_multi_total": 3, "ass_disc_rst_switch": 1, "ass_rst_check_week": "1234567", "ass_rst_check_time": "00:00-23:59", "ass_rst_check_interval": 10, "ass_rst_disc_num": 2, "ass_rst_disc_norestart": 0, "ass_check_errip_switch": 0, "ass_check_errip_list": "10,172,192.168", "dhcp_status": 0, "pppoe_check_errip_switch": 0, "pppoe_check_errip_list": "10,172,192.168", "id": 1, "modified_time": 1693749748, "comment": "", "name": "wan1", "bandif": "84:47:09:1d:76:c4", "pppoe_status": 2 } ] } }返回内容中的pppoe_ip_addr就是拨号的IP，利用定时任务进行对比上次和获取的IP是否一致，如果不一致则请求公网服务器的PHP接口，来重写反向代理配置信息，然后重载配置。2.PHP接口先贴一下需要请求的网站的Nginx配置文件server { listen 80; listen 443 ssl http2; listen [::]:443 ssl http2; listen [::]:80; server_name xxx.xxx.cn; index index.php index.html index.htm default.php default.htm default.html; root /www/wwwroot/xxx.xxx.cn; #SSL-START SSL相关配置，请勿删除或修改下一行带注释的404规则 #error_page 404/404.html; ssl_certificate /www/server/panel/vhost/cert/xxx.xxx.cn/fullchain.pem; ssl_certificate_key /www/server/panel/vhost/cert/xxx.xxx.cn/privkey.pem; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; add_header Strict-Transport-Security "max-age=31536000"; error_page 497 https://$host$request_uri; #SSL-END #ERROR-PAGE-START 错误页配置，可以注释、删除或修改 #error_page 404 /404.html; #error_page 502 /502.html; #ERROR-PAGE-END # 最重要的是这行 ↓ include /www/wwwroot/127.0.0.1/ip.conf; # 最重要的是这行 ↑ #PHP-INFO-START PHP引用配置，可以注释或修改 include enable-php-00.conf; #PHP-INFO-END #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效 include /www/server/panel/vhost/rewrite/6api.itooi.cn.conf; #REWRITE-END #禁止访问的文件或目录 location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md) { return 404; } #一键申请SSL证书验证目录相关设置 location ~ \.well-known{ allow all; } #禁止在证书验证目录放入敏感文件 if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) { return 403; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; error_log /dev/null; access_log /dev/null; } location ~ .*\.(js|css)?$ { expires 12h; error_log /dev/null; access_log /dev/null; } access_log /www/wwwlogs/xxx.xxx.cn.log; error_log /www/wwwlogs/xxx.xxx.cn.error.log; }上面的配置文件中的这句include /www/wwwroot/127.0.0.1/ip.conf; 非常重要，这句是将PHP接口的网站的ip.conf文件引入，以便于后面利用PHP进行修改配置文件，文件内容如下#PROXY-START/ location ^~ / { proxy_pass http://222.xxx.xxx.125:xxx; proxy_set_header Host xxx.xxx.cn; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_http_version 1.1; # proxy_hide_header Upgrade; add_header X-Cache $upstream_cache_status; #Set Nginx Cache set $static_filepdwGFDzU 0; if ( $uri ~* "\.(gif|png|jpg|css|js|woff|woff2)$" ) { set $static_filepdwGFDzU 1; expires 1m; } if ( $static_filepdwGFDzU = 0 ) { add_header Cache-Control no-cache; } } #PROXY-END/ip.conf配置中的proxy_set_header Host xxx.xxx.cn和proxy_pass http://222.xxx.xxx.125:xxx;根据自己的情况进行修改，后续会动态修改proxy_pass参数的对应的IP地址PHP默认是禁用shell_exec函数，需要开启该函数，具体的接口文件 nginx.php如下<?php $key = $_GET['key']; $ip = $_GET['ip']; header('Content-Type: application/json'); if ($key == 'nginx_reload') { // 重载nginx 配置 $res = shell_exec("/www/server/nginx/sbin/nginx -s reload"); echo '{"code":200,"msg":"ok"}'; return; }else if ($key == 'nginx_update') { // 读取当前目录下的ip.conf $res = shell_exec("cat ip.conf"); $pattern = '/proxy_pass http:\/\/(.*?):8223;/i'; // 正则匹配需要替换的IP preg_match($pattern,$res, $matches); // var_dump($matches); // 替换IP为新的IP $res = str_replace('http://'.$matches[1],'http://'.$ip,$res); // echo $res; // 将替换过IP的内容覆盖旧的配置文件 file_put_contents("ip.conf",$res); // 重载nginx 配置 $res2 = shell_exec("/www/server/nginx/sbin/nginx -s reload"); echo '{"code":200,"msg":"ok"}'; return; }else if ($key == 'nginx_get') { // 读取当前目录下的ip.conf $res = shell_exec("cat ip.conf"); $pattern = '/proxy_pass http:\/\/(.*?):8223;/i'; // 正则匹配获取当前的IP preg_match($pattern,$res, $matches); echo '{"code":200,"msg":"ok","data":'.json_encode($matches[1]).'}'; return; } echo '{"code":403,"msg":"error"}'; ?>在公网服务器上新建一个网站，里面放入nginx.php,然后通过定时任务的HTTP进行请求来更新和重载nginx3. 客户端访问假设我在公网上的域名为api.bzqll.com,那客户端就去请求api.bzqll.com,nginx读取对应的反向代理配置，请求反向代理配置文件中的IP，其实就是访问家里动态公网IP，然后到家庭服务器中去，也就实现了不暴露家宽IP还能使用家宽服务器的问题，nginx反向代理是可以抗住超大的访问的，这样也没有内网穿透软件的性能问题。其他其实之前是有考虑过跟公网组建一个局域网的，但是嫌弃麻烦还要搭建东西，有可能还会被运营商屏蔽的问题，就放弃了。另外就是也考虑过内网穿透的方案，但是见到网上说有连接数、并发性能以及稳定性的问题，也放弃了。最终还是采用nginx反代的方案，至少不会因为性能和连接，切记家宽端口用数值比较大的端口，还有不要带域名进行访问。
最近入手了新华三NX30PRO，发现没法IPV6远程电脑，就去问了下官方的客服，然后给出了NX15的开启方案，我试了一下可行，但是还是有点区别。我是在出厂版本上开启的开启教程：1. 确认路由器IP地址用电脑连接NX30PRO的网络，确认自己的路由器IP，也就是后台地址，官方默认的是 192.168.124.1，我自己改成了192.168.123.12. 进入telnet打开CMD命令，输入命令 telnet+空格+IP+空格+99，99是端口号如果是官方默认的192.168.124.1，输入命令telnet 192.168.124.1 99否则根据自己的后台地址输入，比如我自己的是192.168.123.1,就输入telnet 192.168.123.1 99然后回车，后面会让输入用户名和密码 用户名是 H3C 密码是路由器后台的登录密码输入后回车，登录成功3. 防火墙放行然后输入两行防火墙放行IPV6的命令，注意大小写不要错了ip6tables -F ip6tables -X ip6tables -P INPUT ACCEPT ip6tables -P OUTPUT ACCEPT ip6tables -P FORWARD ACCEPT执行命令时中间可能会出现下面的提示，忽略即可ip6tables bad rule (does a matching rule exist in that chain )4. 持久化防火墙配置路由器重启ip6tables配置的内容会失效,可以使用下面的方法持久化输入命令保存防火墙规则ip6tables-save > /etc/firewall.user然后使用命令编辑 vi /etc/rc.local进入后输入 i 进入编辑模式然后添加一行内容ip6tables-restore < /etc/firewall.user然后按 ESC 再输入 :wq 保存退出后续路由器重启也会自动恢复配置的IPV6规则了恩山无线论坛的也是我自己发的，别被说抄袭了 https://www.right.com.cn/forum/thread-8291457-1-1.html
2023年已经过了好几天了，到今天才来写年总结和新计划，拖了好久！2022年我干了啥？去年目标，好像一大半都没完成，有的只完成了一部分养养养养养养养发 头顶和额头头发太少了，20年和21年脱发太严重了 x买个人体工学椅子 完成 √找个对象，年底带回家或者结婚，妥协但也要对自己负责！（最有可能完不成） x 完成了一半改变自己的形象，好好收拾自己，比如提高衣品、纠正自己的坏生活习惯 x在没结婚的年纪，多给自己买点自己喜欢的电子产品，比如扫地机器人（最近着迷）、投影、单反/微单相机 √ 换了iPhone和iPad，也算是完成了，毕竟买了新数码产品三本书，今年必须得安排上 x 没完成今年努力赚够15W吧，基本工资 + 额外的收入 完成 √多看看心理学类的书籍，修炼自己的内心，不要因为一些事情导致自己会患得患失了 x 没完成多运动，每周至少1-2次2公里以上的溜达，不能让自己太胖了 x 没完成然后算了算今年的支出，大概 6-7W，收入只有8W+房租 2W+（因为押一付六，有部分属于预支出）电子设备 1W5+ (平板 5K，iPhone12 3500，iPhone13 4700，耳机 300，显示器1K+，还有一些杂七杂八)礼品 8K+ （珠宝 7K+，化妆品1K+）吃喝用 3W+（实在分不出来了）除了计划内的，其他基本也没有什么了，大部分时间都花在了处对象和游戏上了，然后截止到写总结前已经见过家长了。另外就是在打游戏娱乐这块进步了不少，做饭也稍微进步了一点。还有就是网站、公众号处于半停止运营状态，APP处于勉强运行状态，也没有持续的开发。2023年准备干点啥？见女朋友家长并带女朋友见家长，然后订婚结婚等一系列的人生大事在郑州买房，要去找房子并完成相关流程，买车的话，根据实际情况而定调整原有的生活方式，适应成家之后的生活，尝试定下来两个人的计划，努力扛起这个家现有网站、公众号、APP等进行割舍处理，然后尝试找到新的额外经济来源，并稳定下来健康这块，保持运动，瘦下来，也多关注身边人的健康状况还在写……
说明Pure-FTPd是一款开源的FTP服务器软件，配置简单，安全高效，下面我们在CentOS 8.x/Rocky Linux 8.x系统下部署Pure-FTPd一、配置防火墙，开启FTP服务器需要的端口CentOS 7默认使用的是firewall作为防火墙，这里改为iptables防火墙。1、关闭firewall：systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动2、安装iptables防火墙yum install iptables-services #安装vi /etc/sysconfig/iptables #编辑防火墙配置文件# Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT -A INPUT -m state –state NEW -m tcp -p tcp –dport 21 -j ACCEPT -A INPUT -m state –state NEW -m tcp -p tcp –dport 30000:50000 -j ACCEPT -A INPUT -j REJECT –reject-with icmp-host-prohibited -A FORWARD -j REJECT –reject-with icmp-host-prohibited COMMIT:wq #保存退出systemctl restart iptables.service #最后重启防火墙使配置生效systemctl enable iptables.service #设置防火墙开机启动说明：21端口是ftp服务端口；30000到50000是ftp被动模式需要的端口，可自定义一段大于1024的tcp端口。二、关闭SELINUXvi /etc/selinux/config#SELINUX=enforcing #注释掉 #SELINUXTYPE=targeted #注释掉 SELINUX=disabled #增加:wq #保存退出执行 setenforce 0 使配置立即生效三、安装pure-ftpd1、安装编译工具包yum install make gcc* gcc-c++ openssl openssl-devel bzip2 wget tar2、下载pure-ftpdcd /x/install/ wget https://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.51.tar.gz3、安装pure-ftpdmkdir -p /x/app/pureftpd #创建安装目录 cd /x/install/ tar zxvf pure-ftpd-1.0.51.tar.gz cd pure-ftpd-1.0.51 ./configure –prefix=/x/app/pureftpd –with-language=simplified-chinese –with-everything CFLAGS=-O2 –with-puredb –with-quotas –with-cookie –with-virtualhosts –with-diraliases –with-sysquotas –with-ratios –with-altlog –with-paranoidmsg –with-shadow –with-welcomemsg –with-throttling –with-uploadscript –with-language=english –with-ftpwho –with-tls make make install执行vi /etc/profile命令 把pure-ftpd服务加入系统环境变量：在最后添加下面这一行export PATH=$PATH:/x/app/pureftpd/bin:wq #保存退出执行 source /etc/profile 使配置立刻生效编辑 vi /usr/lib/systemd/system/pure-ftpd.service 设置pureftpd开机启动[Unit] Description=Pure-FTPd FTP server After=syslog.target network.target [Service] Type=forking ExecStart=/x/app/pureftpd/sbin/pure-ftpd /x/app/pureftpd/etc/pure-ftpd.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID [Install] WantedBy=multi-user.target:wq #保存退出systemctl enable pure-ftpd #添加开机启动 systemctl start pure-ftpd.service #启动 systemctl stop pure-ftpd.service #停止 systemctl restart pure-ftpd.service #重启4、配置pure-ftpd4.1新建系统用户和组www，用户登录终端设为/sbin/nologin（即不能登录系统）groupadd www useradd -s /sbin/nologin -g www www此系统用户作为ftp虚拟用户的宿主用户4.2创建FTP服务器虚拟用户访问目录mkdir -p /x/data/pureftpd #ftp虚拟用户主目录 mkdir -p /x/data/pureftpd/ftpuser01 #ftp虚拟用户ftpuser01的目录 mkdir -p /x/data/pureftpd/ftpuser02 #ftp虚拟用户ftpuser02的目录 chown www.www /x/data/pureftpd -R #设置ftp虚拟用户目录权限为宿主用户www所有4.3创建虚拟用户/x/app/pureftpd/bin/pure-pw useradd ftpuser01 -u www -d /x/data/pureftpd/ftpuser01提示输入ftp虚拟用户密码：Password:123456Enter it again:123456同样可以添加第二个用户/x/app/pureftpd/bin/pure-pw useradd ftpuser02 -u www -d /x/data/pureftpd/ftpuser02-u选项将ftp虚拟用户和宿主用户www关联，虚拟用户登录后，会以宿主用户权限进行上传下载操作-d选项后面是ftp虚拟用户的目录，每个ftp虚拟用户只能访问自己的目录/x/app/pureftpd/bin/pure-pw mkdb #生成虚拟用户数据文件虚拟用户数据存放文件/x/app/pureftpd/etc/pureftpd.passwd #虚拟用户文件 /x/app/pureftpd/etc/pureftpd.pdb #虚拟用户数据文件4.4修改pure-ftpd配置文件mkdir -p /x/app/pureftpd/var/run/ #创建进程文件存放目录 mkdir -p /x/app/pureftpd/var/log/ #创建日志文件存放目录 vi /x/app/pureftpd/etc/welcome #添加Pure-FTPd登录欢迎信息文件，内容可以自定义Welcome to Pure-FTPd:wq #保存退出cp /x/app/pureftpd/etc/pure-ftpd.conf /x/app/pureftpd/etc/pure-ftpd.conf-bak #备份配置文件 vi /x/app/pureftpd/etc/pure-ftpd.conf #编辑配置文件Bind 0.0.0.0,21 #设置ftp端口，默认为21，0.0.0.0表示本机所有ip地址 PassivePortRange 30000 50000 #设置PureFTP被动端口 AnonymousCantUpload yes #禁止匿名用户上传文件( no表示允许上传) NoAnonymous yes #禁止匿名连接，仅允许认证用户连接 UnixAuthentication no #禁止系统用户认证 Daemonize yes #允许后台运行 PureDB /x/app/pureftpd/etc/pureftpd.pdb #虚拟用户数据文件 PIDFile /x/app/pureftpd/var/run/pure-ftpd.pid #进程文件 AltLog clf:/x/app/pureftpd/var/log/pureftpd.log #日志文件 FortunesFile /x/app/pureftpd/etc/welcome #Pure-FTPd登录欢迎信息 #TLS 2 #支持加密传输 #CertFile /x/app/pureftpd/ssl/pure-ftpd.pem #加密证书路径:wq #保存退出systemctl restart pure-ftpd.service #重启5、使用ftp客户端进行连接在Windows下使用ftp客户端软件（FileZilla、FlashFXP）连接ftp服务器扩展阅读：1、pure-ftpd虚拟用户相关操作/x/app/pureftpd/bin/pure-pw passwd ftpuser01 #修改密码 /x/app/pureftpd/bin/pure-pw useradd ftpuser01 -u www -d /x/data/pureftpd/ftpuser01 #添加用户 /x/app/pureftpd/bin/pure-pw userdel ftpuser01 #删除用户 /x/app/pureftpd/bin/pure-pw usermod ftpuser01 -d /x/data/pureftpd/ftpuser01 #修改用户目录 /x/app/pureftpd/bin/pure-pw show ftpuser01 #查看用户详细信息 /x/app/pureftpd/bin/pure-pw list #查看所有用户 /x/app/pureftpd/bin/pure-pw mkdb #对ftp虚拟用户进行修改等操作后要重新生成数据文件，重启pure-ftpd服务才能生效2、Pure-FTPd服务器启用加密传输mkdir /x/app/pureftpd/ssl #创建加密证书存放目录 openssl req -x509 -nodes -days 7200 -newkey rsa:2048 -keyout /x/app/pureftpd/ssl/pure-ftpd.pem -out /x/app/pureftpd/ssl/pure-ftpd.pem #创建证书，注册信息可以自定义填写，我们是自己使用，不需要证书颁发机构认证 chmod 600 /x/app/pureftpd/ssl/pure-ftpd.pem #设置证书文件权限在Pure-FTPd配置文件/x/app/pureftpd/etc/pure-ftpd.conf中设置启用证书TLS 2 #支持加密传输 CertFile /x/app/pureftpd/ssl/pure-ftpd.pem #加密证书路径TLS和CertFile这两个选项必须同时启用，TLS值为1，不启用ssl加密，值为2启用ssl加密systemctl restart pure-ftpd.service #重启最后使用ftp客户端连接
目前并没有步入婚姻，但时刻准备着的我，最近在知乎翻到了一个问题“男人对婚姻是怎样的看法？”里面有一个我相对来说比较赞同的回答，有无法理解的，也有值得深思的。内容出处：https://www.zhihu.com/question/457019241/answer/1901065798我出生于1981年，今年刚满40周岁，按平均寿命推算，我的前半生已经过去了。在过生日的时候，我一直在问自己，该以什么样的姿态迎接自己的后半生？很早之前就听一个朋友说过，人生四大课程，学业、事业、家庭、婚姻，对于像我这样的完美主义者来说，四门课都及格，人生才算及格。婚姻这门课没有教科书，也没有老师，更没有标准流程，全靠亲身实践，不断反省和总结。我的个人情感经历并不顺利，起个大早却赶了个晚集。最终也没能跟自己喜欢的女孩在一起，而喜欢我的那个女孩追求了我好几年，但她始终不能让我有心动的感觉。后来年龄渐长，我跟爱人在亲戚介绍下相亲认识，她比我小一岁，看看差不多，第二年就草草结了婚，今年是结婚第12个年头。与很多夫妻相比，我们婚前感情基础很薄弱，在性格、思维方式、生活习惯等有很大差异。婚后有相当长一段时间夫妻关系不尽如人意，有很多次争吵，也打过冷战，好在我们两个都没有放弃，12年来不断反省，不断改善，现在夫妻关系非常和睦，配合也非常默契。与大部分朋友一样，我的婚姻也不是一帆风顺。在前一次危机时，我曾请教自己的好友，同时对观察到的婚姻（自己、亲友、同学、朋友、同事等等）进行了分析和总结，听取了很多同龄朋友对婚姻的理解，中间有幸福案例，也有失败教训。我想着把自己对婚姻的粗浅理解写出来，分享给现在30岁左右、准备面对婚姻或者刚刚进入婚姻的年轻朋友们。由于个人能力和阅历有限，我的理解可能不全也可能片面，仅供参考，如有不妥请多包涵。1、有些年轻朋友一直在考虑是不是要结婚。在我看来，在合适的年龄做这个年龄该做的事情是最省心省力的选择，而婚姻就是对自己未来的一种规划。20-30岁的你意气风发、勇往直前，逐渐站上人生舞台的顶点，你会觉得单身很快乐，那是因为你可以随时召唤一批朋友吃喝玩乐，也可以享受轻松惬意的独处时间。但你可曾想过，天下没有不散的宴席，你终会衰老，终有一天你会走下这个舞台。只需要想象一下：当自己中晚年的时候，没有丈夫或者妻子，父母已经故去或者行将就木，早年那些一呼百应的朋友就算还在，你确定还能随时随地喊出来玩乐？不是，他们每天陪孙子孙女玩耍的乐趣已经远远大于跟你聊天的乐趣。人家是儿子女儿媳妇女婿不定期地往家里跑，然后全家人围在一起吃团圆饭；人家可以全家老小一起出去游山玩水，拍照发朋友圈；人家生病了，要是子女孝顺，一家子人上上下下围着转，即便子女不在身边，最起码还有配偶可以说话、可以端茶倒水。而你，一个人玩，一个人看电影，一个人旅游，一个人去医院，一个人吃年夜饭，茕茕孑立、形影相吊的场景，你确定自己能开心得起来？不抑郁就不错了。结婚，晚年不一定幸福；但不结婚，晚年且不说幸不幸福，有没有勇气活下去都是个问题。老年最怕孤独，多一个人就多一份希望与期盼。父母希望孩子结婚，并不一定是封建思想作祟，而是他们已经预见到没有婚姻的你将要面对的晚年。当然，婚姻中还会遇到许许多多意想不到的波折，当你最虚弱最需要帮助的时候，配偶可以给你一个依靠，一个喘息的机会，让你能卷土重来或者安然度过自己短暂的一生。我爱人在婚后不久就遇到了职业发展的危机，原单位想安排一个关系户进来占她的职位，就提出不跟她续约了。她很失落，当时在这个单位已经做了五六年，又是已婚未育的年纪，找工作很受歧视。我后来就跟她说，没事，我养你好了，没什么大不了的。婚姻的意义在这种场合就体现得非常明显，我也不确定以后自己会不会遇到职业危机，但两个人一起扛总比一个人强得多。结婚确实多了很多事情，但不婚的问题也不少，老天爷在这方面非常公平。婚姻是生活的一部分，我们考虑问题的出发点都是希望自己生活过得好。婚姻是人生大事，也是重大机遇，完全值得你高度重视、慎重抉择。它还有个特点，就是有时间限制，无论男女都有最佳婚配时间段。你要放弃这个机会很容易，但想重新补回来，很难很难。正如2021年6月24日黄国平博士在西南大学毕业典礼上说的：短短的一生我们最终都会失去，不妨大胆一些，爱一个人，攀一座山，追一个梦。在结不结婚的这个问题上，与其消极等待、犹豫不决、空耗青春，不如趁自己还年轻，调整心态，努力去追求一次，把握好机会。如最终还是不能如愿，再考虑不婚。当一个人即将告别世界的时候，他很少会去后悔我钱赚少了，而是后悔有很多事情我还没来得及做。在合适的时间去做这个年龄该做的事，是对自己人生的负责态度。即便没有如愿，也足以在晚年宽慰自己，我尽力了。俗话说：好事不出门，坏事传千里。有很多朋友尤其是年轻的女性朋友恐婚，有一大原因是因为在网上看到了太多的婚姻悲剧，以为不幸福的婚姻是大多数。这是严重误解。因为寻常婚姻大家都已经熟悉，而那些奇葩婚姻更能吸引眼球，在猎奇心态下，互联网不经意之间就夸大了极端案例。我曾对自己所在部门做过长期观察，我们部门差不多100个人，年龄在29-60岁之间，在本部门工作年限平均在10年以上，最多有20年，同事之间对彼此家庭情况非常熟悉，也经常交流。现在已知的未婚有3人，离婚的3人（其中40-50岁2人，51-60岁1人），算上可能存在的隐性个例，不理想的婚姻比例应该在10%以内。大部分结婚10年及以上的夫妇，早已把爱情幻化成亲情，相互信任，互相依赖，一生相伴。我在这篇文章里所说的是大部分夫妻的正常状态，也许在细节上不同婚姻会有差异，但整体上基本类似。2、大学本科毕业后，一切不是冲着婚姻的恋爱都是耍流氓，对于女孩子尤其如此。校园恋爱与婚恋很不一样，前者主要是感情和两人相处，关键问题是看人；后者要增加物质条件、家庭、事业发展等要素，考虑问题要多得多。恋爱时不能只说情话，更要观察对方的三观与自己是否一致。这里的三观主要指消费观、择偶观和发展观。消费观是指两个人对消费水平、消费方式的看法，是价值观的延伸。它是在长期生活中逐步形成的一种东西，短期内很难改变。传统意义上所说的门当户对，表面上看是家庭条件差不多，更深层次就是指消费观差不多。不同消费观的人在一起会非常别扭，你可能觉得她太奢侈，花钱大手大脚，而她会觉得你很吝啬，鸡毛蒜皮都要算得清清楚楚，两个人都不舒服。相反，类似消费观的人在一起很容易达成共识，生活质量也不至于发生大的波动，更有利于未来家庭经济状态的稳定。择偶观就是指选择配偶的态度和看法。合适的择偶观建立在准确的自我评估基础上，你的优势在哪里，劣势在哪里，要看清楚才好。如果感觉不好把握，最好也是最简单的方法就是相亲，尤其是在资源极丰富的大城市里，通过观察相亲对象的整体水平，你可以总结出这个社会上与自己契合的人大概条件是怎样的。相亲数量越大，这个定位会越准。如果你对配偶的要求与相亲对象整体水平接近，你的选择面就很大了，脱单的可能性也越大。在选择配偶时，可以通过三方面把握，首先是相似性的优先级高于互补性，所谓相似性就是我们常说的“夫妻相”，两个人一开始就在很多方面类似。其次是门当户对，不仅仅是物质上的门当户对，更是精神上的门当户对，即价值观、学识、才智上最好旗鼓相当、势均力敌，这样意味着两个人在人生目标、生活中的重大决策上更容易达成一致，即使有了冲突，也比较容易和解。第三是性格适合自己。性格需要通过平时的接触来观察和体验，包括为人处世原则，对事务的看法，责任心，同理心，执行力以及发生冲突时的处理方法等等。观察性格匹配是需要时间和现实中的接触，而且性格有很大一块是跟对方从小的成长环境和人生经历有关，婚恋时最好通过聊天了解一下这方面的信息，尽量选择跟自己成长环境相近的人。对于年龄小或者社会阅历少、比较单纯的朋友，人生规划要提早，预留的婚恋时间稍微长一点，最好不要异地和闪婚。所谓的发展观就是对未来婚姻生活的计划和安排。包括以后在哪里发展、什么时候在哪里买房安家、要不要孩子、孩子养育教育安排、双方老人养老安排等等。未来发展规划是婚恋的重头戏，爱你的人一定会把你纳入到他的未来发展规划中。如果在此基础上能够相互辅佐、共同成长，那就是绝配。如果在交往中你觉得对方性格、品德有很大缺陷，千万别轻易答应结婚，江山易改本性难移，想通过长时间等待对方主动改变这些弱点，多半会失望。如果你们两个都有很强的结婚意愿，而且跟对方在一起时有一种强烈的安定感和归属感时，那就说明你们已在心理上做好结婚准备了。3、很多人在恋爱时很投入，非常甜蜜，到了结婚之后就觉得木已成舟，开始变得很随意。这是很多人婚姻方面越走越差的原因之一。结婚只是一个开始，相当于入职，跟事业发展一样，后期需要花很多时间和精力去经营。幸福婚姻是人生一份宝贵财富，也是学业、事业成就难以替代的，它会带来我们最期望的一种安定感，同时也能从中学到很多东西。婚姻也是两个家族的联合，尤其是有深厚背景的官员家庭或者富豪家庭，婚姻可以帮助实现家族利益最大化。对于婚姻，男人和女人的想法并不完全一致。当一个女人下决心嫁给男人的时候，就意味着她把自己托付了给男人，以期他为自己带来幸福，通常这个期望值会比较高。而对男人来说，结婚更多的是一份责任。从结婚的那一刻起，你不再是父母羽翼下的小树苗，而要成为一棵能够为家庭遮风挡雨的大树。遇到困难的时候，多问自己一句：你还是男人吗？如果回答是，就请拿出自己作为男人的勇气和担当来，在爱情和责任的引导下披坚执锐、无所畏惧，把自己的女人和孩子照顾好，不要让她们受到伤害，努力给他们提供你能提供的最好物质条件，不断改善生活品质。两个人出生、成长的环境不一样，进入婚后的新环境都需要有一个适应期。几乎所有夫妻婚后都会遇到摩擦，在思维方式、做事风格、生活习惯、家庭事务、教育子女等问题上都会出现各种各样的矛盾。这一点在婚前要有心理准备，适当降低对婚姻的期望值，不要把自己和对方想得太完美。有很多人认为婚姻破裂主要是一些诸如出轨、价值观等大因素，但现实中造成离婚原因的最大可能反而是一些诸如个人生活习惯、性格摩擦等等微不足道、鸡毛蒜皮的小事，这些小摩擦和小冲突常年累月在精神冲击着两个人的神经，造成整个婚姻支离破碎，而忠诚、价值观等等只是压倒骆驼的最后一根稻草。建议遇到矛盾时一定一定要注意控制自己情绪，仔细想想这些是不是原则性的问题，如果不是，那就好好说话。家务方面姿态要灵活，不要把以前在家不做家务放在嘴边，以前那是爸爸妈妈的家，现在是你的家。如果对配偶在某块家务方面有要求或者本人擅长某一方面的事务，那么最好这一块事情你来做。如果有些家务谁都不喜欢，那就考虑一下干脆出钱请人完成相关服务。建议新人们婚后凡事多商量，如有矛盾尽快解决，不要堆积，必要时可以开诚布公地深谈一次，先自我批评，再把自己的顾虑和要求很明确地告诉对方，大家协商着来，互相理解，互相妥协，找到双方都能接受的行为准则并执行。婚姻中的吵架不怕，冷战尤其是长时间冷战才是对婚姻最大的消耗。4、男女在婚姻中都需要安全感，在日常生活中要注意观察对方最在乎什么，并及时给予满足。无论男女，婚后大概率会遇到让自己心动的异性，可能会比你现在的配偶看起来更“优秀”。但成熟男人应该知道，当一个人对你有意思时，她只会把最好的一面给你看，那另一面呢？如果有业务牵扯，还要问一句，她接近你是否还有其他目的？建议把这种心动当成是你路上看过的风景，不要采取任何行动。与异性相关的事情对不对，能不能做，建议站在配偶角度看看，会更清楚。一个品行端正、思维成熟的异性朋友会自动与已婚的你保持距离，绝不会在言行上给你任何带有暧昧的暗示。有时候在工作、生活很难断绝与异性的往来，干脆主动让配偶知道你跟谁在聊天，分享那位异性朋友的问题和你的感受，听听配偶的观点，一起学习，共同进步。如果你现在的那位实在不堪或者有严重的品德问题背叛婚姻，离婚是个选项。据有经历的朋友说，离婚后的生活也没有想象得那么难，现在社会对离异、二婚的包容也比过去好很多。但不要选择出轨，更不要去破坏别人的婚姻，容易出事。据我们一群40+的男人共同讨论结果，出轨离婚以后跟小三在一起，大概率比现在过得更差。5、生育养育孩子从某种意义上是为了自己后半生做的投资。健康的人选择丁克要特别慎重，尤其是女人。最怕就是婚后一开始夫妻都选择丁克，后面男人变心想要孩子了，有了外遇提出离婚什么，此时女人早就过了最佳生育年龄，孑然一身回到原点，这种境遇会比单亲妈妈还差。6、当有了孩子之后，很多夫妻会把大量精力放在孩子身上，时刻围绕着孩子转，而忽略了对另一半的关照和满足，这是对婚姻的误解。婚姻的核心是夫妻关系，而非亲子关系，如果你把孩子理解为充话费送的，也未尝不可。必要时把宝宝暂时送外公外婆爷爷奶奶家养几天，宝宝也绝不会像你想象那么脆弱，没有爸爸妈妈几天陪伴，他也一样在成长。两个人出去走走，创造一点二人世界的机会，像早年恋爱时一样，吃喝玩乐，亲密接触，谈情说爱，回忆往昔，这会让婚姻更幸福。PS：要满足女人，男人最基本的就是做到两点，钱要给够，爱要给够。即便结婚后，多关心一下身边的她，尤其是她心情不好的时候，要是看着情况不好，主动帮她分担一下家务。婚后平时也可以多说一点情话，想亲就亲，该抱就抱，兴致上来了就来一次。7、爱情与婚姻。很多年轻人容易把恋爱和婚姻混为一谈，有些人认为必须有爱情才能结婚，这其实都是不对的。恋爱考虑的是两人之间的感情；而婚姻最关键的因素是合适。很多过来人会感叹，我终于明白：原来爱不爱一个人，能不能跟他在一起，适不适合结婚，这三者是完全独立的三个问题。什么叫独立？也就是说，没有爱情，只要能看得过去，不讨厌，也可以在一起，也可以结婚，婚后未必不幸福。相反有爱情，未必真的合适，爱情会随着时间流逝和生活琐事的冲击逐步变淡，而生活方式、生活习惯和三观的差异足以成为压倒你们的最后一根稻草，不顾一切在一起的最后可能会以离婚收场。某种意义上，婚姻其实更像一种合作，寻找的是能够共同生活的人生伴侣。两个人能够互相理解、互相配合、不断反省、不断改善，婚姻可以非常幸福。这样才能解释我们的父辈祖辈包括那些官商结合的家庭，婚姻双方事先可能根本都不认识，但轻而易举就走进婚姻殿堂，过得也很平稳安耽，幸福感远超一般人。很多女生容易恋爱脑，被爱情小说、电视剧、狗血鸡汤文荼毒得一塌糊涂，很容易高估爱情的力量，低估婚姻生活的真实性。一旦看上对方，眼睛里都会放光，对他的个性缺陷包括他家庭的局限视而不见，对婚姻不够重视，没有认真去思考过你们是否真的合适，甚至对好心劝说自己的父母、亲友、同学、朋友抱着一种抵触的态度，认为对方是封建思想作祟或不懂得爱情。这也造成很多婚姻在选人阶段就存在先天不足，给未来婚后生活带来了巨大隐患。爱情是一种奢侈品，如果能找到爱情那是最好，如果实在找不到爱情，那就找一个人品好、性格合适、有一定经济基础、会过日子的人共度一生，朝夕相处早晚也会是亲情。当你选择接受一个人的时候，不光是看到她的优点，还要包容她的缺点，包括她的前任。确定关系前你可以问清楚，慎重考虑，但从确定关系的那一天开始，之前所有事情一笔勾销，之后希望认认真真对待面前的她，双方约好都不要提起各自前任，更不能跟前任在现实中单独见面。结婚就要有结婚的样子，无性生活的婚姻不一定不幸福，但和谐的夫妻生活确实对于改善感情有很大帮助。8、关于物质。稳定幸福的婚姻有两大基石，一是人品和性格，二是物质基础。当两者都跨过及格线，婚姻大概率不会差。年轻的时候最缺钱也最看重钱，有些大龄未婚男觉得等女人年龄大了就会降低物质要求，我认为这是对社会规律不了解的表现。再怎么降，她还是有个下限，就是基本生活条件比如一套小房子。所以对于男人来说一定要好好把握大学毕业到30岁左右这段黄金时间，尽量把自己的事业拉上去。对于家境不太好的男孩，30岁之前不要考虑结婚，等有了经济基础后争取往下兼容，如果已经婚了，暂时不要考虑有孩子。物质上的约定是婚恋中最重要的内容之一。双方一定要在婚前说好，婚后家里的每一分钱都是两个人的，没有你的我的之分。如果想要婚姻稳定，首先要做到两个人各自经济独立，这是保障双方能够平等对视的基础。在此基础上要尽快实现小家的经济独立，这样说话做事才有底气，也可以避免来自于原生家庭的某些干扰。超过一定金额的支出，必须在支出前告诉对方并征得对方的同意，哪怕这笔钱是给自己父母或者至亲的，这也是对对方的尊重。送钱的时候也可以玩个小技巧，给娘家的钱由男人送，给婆家的钱由媳妇给。有的男人赚得并不多，对自己很抠门，但特别愿意在老婆身上花钱；也有很多女人看到自己老公辛苦，负担又重，想方设法开源节流；有的女人年轻时是个月光，结婚了简直转了个性，逛街都很少，原本经常去银泰的也不去了……这一切的一切都是为了这个家，他们都是普通工薪阶层，但婚姻中的利他属性让他们的婚姻很幸福。通常情况下，社会上大部分时候男人的收入会比女人多，家庭分工中女人承担内部事务也会比男人多，这是一种平衡。男人在经济方面的大气是对女人的诚意表达，也是对她在家庭事务中辛苦付出的补偿，女人心里对此很清楚。不要怕女人乱花钱，真正爱你、心疼你的女人深刻懂得你给家里的一分一毫都是你辛苦所得，她会帮你省钱。万一真的发现女人很不堪，其实也可以及时提出或止损。很多夫妻会纠结工资卡怎么管，其实分开管或者一方管都可以，但我觉得作为男人每个月起码要承担起家里的大部分开销。我的做法是把工资卡直接给老婆了（其实工资卡就放在我们都知道的地方，而且密码也不改，我真要拿钱也很轻松，当然如果有大额支出，我肯定要告诉她一声）。有了额外收入的时候，第一时间告诉她，与她分享喜悦。比如说我挣了1000块钱，第一时间支付宝给她转个800，然后问她一句：够不够？她要是说不够，我把剩下的200也转过去。有些朋友可能会觉得有点可惜，其实把时间轴拉长，你会发现赚钱能力才是核心能力，只要能力在不怕钱不来。几次下来之后，她不好意思，不过我还是继续塞，有时候钱不多，只有一两百，但能给她一个好心情也值了。孩子懂事之后，每次我有额外收入，她也会收到一份，有好事全家人一起分享。千金散尽还复来，你对家人点点滴滴的关爱最终会以千百倍回报到你身上，老婆把你照顾得舒舒服服，全家上下同心同德，有什么不好？9、有些朋友因为经济原因迟迟未能走进婚姻的殿堂，我认为对于一对接受过高等教育，有正式工作，且愿意为了自己和家庭幸福而努力的年轻人来说大可不必如此悲观。结婚的关键在于你是否认为对面这个人值得你去相伴一生？如果两个人答案是确定的，那么很多问题都好解决。我有很多朋友在一线城市和强二线城市，房价不低，家里条件好的可以考虑一步到位，条件不好的，先买小房子，一点一滴慢慢积累起来。其实房价高的问题在1998年房地产市场开放之后就一直存在，很多很多朋友包括我自己在婚前都感觉，房子真贵，但真的找到了那一位并共同为之努力的时候，还是感觉这个目标应该能达到，而且实现的往往比预料得还快一点。我同学朋友中有条件很好的，也有条件极差的，但在几年前开毕业10年的同学会，基本上每个人都买了房子，无非是房子大一点小一点，地段好点差点，早买晚买而已。年轻时大家都没钱，没什么丢人的，但到了四五十岁时，经济和婚姻上会不会经营的差距就很大了。如果能遇到合适的人，房子方面的立场不要太固化，可以考虑合买。正所谓存人失地，人地皆存；存地失人，人地皆失。人的重要性始终要在物质之上。10、关于事业。事业发展有很多影响因素，比如个性、勤奋、选择、机遇、家庭社会资源等等，婚后一个人事业发展不好并不一定是他不够努力。在婚后，一方面在各自事业方面要继续努力，为家里尽可能创造好的物质条件，一方面对对方的事业要保持平和和支持的心态；作为事业发展弱势的一方，可以把对方的成功也认为是自己的成功，正是你的眼光和支持，才让ta有今天的成就；作为强势的一方，也不要因为自身发展比较好而苛责对方，三十年河东、三十年河西，明天还指不定是个啥情况呢。中间可以用家庭生活做一些平衡，比如弱势一方不论男女，可以多花一些心思在家庭和婚姻经营上，消除对方后顾之忧，风雨同舟，荣辱与共。2021.5.25更新11、全职妈妈。在婚后，很多女人都会考虑全职妈妈的问题，尤其是生育前后。在这方面，我认为短期的全职妈妈是可以的，但长期不是太建议。不当全职妈妈主要由两方面考虑，一是婚姻稳定性；二是安全感。有些女人容易被洗脑，比如那句“你负责赚钱养家，我负责貌美如花”，这对于婚姻的稳定性不是好事，婚姻是一种价值交换，因为你不可能一直年轻，颜值身材的吸引力会越来越差。男人要出轨一般有三个条件，首先是他的道德底线没有高尚到足以压制性冲动；其次是自身条件能吸引很多异性；第三是出轨的后果他能承担。对于全职妈妈，这些方面的防御能力很低，也就是常说的吼不住。优秀男人对周围年轻女人的吸引力很强，结婚并不意味着竞争结束而是竞争常态化，男人越强，女人的能力也要随之水涨船高，此时夫妻婚后共同成长的意义就体现出来了。那种独立自主、能够在事业上影响男人甚至决定他发展的女人，男人绝不敢贸然出轨。前面说的是优秀男人，而对于大部分普通男人，更多地是一种心理安慰。现在社会内卷得厉害，职业稳定性也比较差，家庭中一个人赚钱跟两个人赚钱的安全压力完全不同，有些男人也希望女人共同分担一部分压力，哪怕只是从心理上分担一部分。对于女人来说，最基本的安全感就是经济独立，有自己的事业，有独立的经济来源，足够养得起自己，甚至养得起孩子。这时候女人心里可以说：如果你想好好过，那么我们就好好过。如果你想离婚，也可以，反正我足够养得起自己和孩子。有了底气，处理各种婚姻问题也会更加游刃有余。12、特别小心家庭对婚姻的影响。在离婚案例中，真正出轨的比例是很小很小的，比较多的是夫妻感情不合，占比超过1/3，而在这个问题中，家庭对婚姻的影响不可小视。很多人在婚后都会面对原生家庭的干涉，尤其是独生子女，在父母眼里，你永远是小孩，很多年轻人对父母言听计从，而这种干涉是现实中很多婚姻破裂的重要原因。结婚就相当于分家，父母家是父母家，自己家是自己家，双方互相独立。有些人将父母的意见看作是圭臬，而不顾及配偶的意见和感受，这其实是一种没有长大的表现。你要想想即便在遗产继承等法律上，父母和配偶可是同级别的，而且正常婚姻陪伴你到人生终点的大概率会是你的配偶和子女，而非你的父母，明智的你从婚后一开始就应把两者平等看待。家里重要事情可提前知会父母，充分沟通，最后决策应你与配偶共同做出。如果涉及到两家利益的事情（比如二胎娃跟哪一方姓），事先可以反复磋商合理安排，不偏不倚，一旦定下就不要反悔。即便自己父母事后觉得自己吃亏提出变更，也要顶住压力，据理力争。如果父母与配偶有矛盾，千万不要让父母直接跟配偶交涉，自己则缩在一边一言不发或者总是说”她是我妈，我能怎样？“。这种妈宝男在我亲近的人中出现过，我向来很看不起这种人，搞不清楚自己现在是3岁还是30岁，完全是一种缺乏成熟的独立思维，缺乏男人应有的责任、勇气和担当的表现。以现在女人普遍的独立思维，很难接受这种男人，即便换一个女人，也可能依然是这样。比较好的做法就是站理不站人，谁有理就支持谁。勇敢地去当中间人，做和事佬，承担所有的夹板气。父母与子女吵架，即便吵得再凶，事后还是亲子，但要是放任父母与配偶争吵，这种裂痕有可能是一辈子。如果你有了恋人，准备迈入婚姻殿堂，请在结婚之前务必审视一下对方的家庭，包括对方家庭内部关系，矛盾处理方式，你的那位在家庭中的地位，对方家庭对你的态度。最好选择对方本人和家庭都合格的才结婚，如果有一方不太合格，一定要慎重，千万千万不要被爱情冲昏了头脑，以为有爱情就能解决一切。当然，对面家庭不一定就是反作用，正面激励作用也非常重要。婚后，请男同胞们一定要注意维护好自己与岳父母的关系；而女同胞们要注意维护自己与公婆的关系。平时多走动，该送礼就送礼，不一定很贵，比较实用的米、面、油、水果、牛奶、日用品都行。哪怕最开始人家对你不太待见，也要坚持送，送到他们改变主意为止。给自己父母买东西的时候，顺手也给对方父母买一份，而且要及时告知你的配偶知道，我对你的好，不光是对你，还有你父母。同时也要让两家大人知道，我对两家大人同等重视、一视同仁。这种长期的情感投资很有好处，一方面公婆与儿媳，岳父母与女婿的关系会更加和睦；另一方面万一夫妻发生争执，对方父母会站在你这边，成为你的同盟，帮你去劝说自己儿女。这一点也是我自己实践出来的。现实中我对我岳母很尊重（PS：我岳父已经去世了，生前我对他也很好），她的智能手机还有家里很多电器、日用品都是我买好专程给她送过去，就跟亲生儿子差不多。后来有几次我跟我爱人吵架，我岳母从来都是站在我这边，我爱人面对自己妈妈的劝说也没了脾气。我爸这里也一样，有问题他只批评我，从来不说爱人任何坏话。就时间跨度来说，前半生陪伴你时间最长的是父母，后半生是配偶、子女，与这些人的关系都需要你用极大耐心和高超智慧认真对待，人生四大课程中的婚姻和家庭，其意义绝不在学业、事业之下。2021.5.30更新这篇文章被老婆看到了( -\_-! )，老婆语录：1、婚姻处理得好不好，还要看男人对婚姻的感悟能力，不一定说非要亲身经历才懂。跟事业一样，保持一种学习的心态会更好。2、爱情不是婚姻的必需品，没有爱情照样可以结婚，关键是合不合适。2021.6.6更新13、危机处理。大部分朋友都是初婚没有经验，夫妻之间感情出了问题多半不愿意告诉别人，家丑不可外扬嘛。但如果矛盾长期得不到解决就要警惕了，这时我感觉还是要勇敢说出来，告诉自己那些正直、靠谱又成熟的朋友或者亲友，一方面减轻自己心理压力，一方面寻求解决对策。当然可以多问几个人，综合一下大家的看法。旁观者清，当局者迷，有时候朋友们的一句安慰，一句劝解，一句提示就可以化解你心头疑虑，让你的婚姻走得更顺畅。很长的一段文字，也略有思索。目前只希望自己通过不断的学习、反思、总结能让自己步入婚姻时少踏坑！
最近一年我的博客好像没什么动静了？
翻翻自己的博客，最近一年好像没更新什么内容，也好像没有什么内容产出，那么我这一年到底干嘛去了？我也一直在问我自己啊，我这一年究竟干嘛去了呢？学习、工作、开源、恋爱？还是？容我慢慢到来吧，也让我补上这2020年不知道自己说的啥的总结！提起这个要提起前些年的时候，因为那个时候我就开始用自己学到的技术做开源了，然后逐渐了累计了技能和认识到了不少的人。其中那个日请求量上百万的API也是在圈子打响了名声，后来跟认识的人也有一些交流，然后从19年末在上班的状态就下了决心，自己做点什么东西，赚点外快，搞点钱花，天天上班也就那点死工资，搞不了几个钱。19年底新冠疫情爆发，那时我才入职不到2个月，公司本身给我安排的工作就不是很多，加上我刚去不久对业务还不太熟悉，公司项目也搁置很多，问领导要活干就没有什么工作，就让我闲着。如此以来，估摸着我离丢工作也不远了。然而当时没想那么多，趁着空闲用起了私下正在学习flutter开发APP，干了十来天APP就出来了，然后就边在公司混日子，一边白天上班，一边晚上维护APP。这样的状态从19年底持续20年3月份左右，中间还开始搞了公众号，逐渐开始有收益，以至于差不多能养活自己，又因为工作的不顺利，一狠心就不计成本的从上海辞职了。后续的日子，回到了郑州，消费水平比郑州低了很多，压力也小了许多，慢慢的做自己的事情了，维护APP，运营公众号，再到运营维护一个网站，可以说是从设计、开发、维护、营销、运营、售后自己全肝了，反正也都没日没夜的瞎搞，就这么过了一年，收入比起上班还不错，这也算是一件好事吧。贴一张图，给看一眼干了大半年，发现自己干比给别人干还爽，但是累是真的累，好就好在累也是给自己干的。再者就是，一个程序员直面用户真的是太痛苦了，尤其是沟通交流的问题，让人头大，但是直面用户挣的是比自己写代码挣的多，尤其是做出来东西，有了流量以后，那是真的挣钱。这么大半年，精力大部分都用在了其他事情上，在学习、开源这个技术活上，真的花了太少的时间了。21年还是得要多花时间去做开发和保持学习了，不然真会被时代遗弃掉，毕竟现在还是科技驱动的时代。后续，如果不出意外的话，还会进行做开源相关的事情，只是暂时没有什么比较好的项目或者想法，想着把之前用Java写的音乐API用PHP写一下试试吧，当个开胃菜拿出来小规模的使用！如果有PHPer也可以PY一下，毕竟我不熟这个语言，只是因为目前手里很多东西都是PHP做的，迁移也比较方便！还有就是，今年我也脱单了哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈，这应该是让我笑的最开心的事情吧，有点小遗憾的是，目前还是异地恋！
今天被朋友圈的18岁刷屏，才忽然感觉到17年剩余的时光不多了，90后的都没有了18岁，杀猪刀再次砍向了我。1. 回首2017回首一下2017年发现今年似乎什么都没有做，但又感觉过的很充实，开始自我矛盾纠结。。。1.1 大二下学期 (上半年)先说说干了点什么吧1.1.1学习 And 学习1.学习课程知识(Android，Java And 我也忘记了)2.自己写了3个简单的APP(记事本,天气,Giwifi)3.参加了几个省级技术开发竞赛，一个拿了团队三等奖，一个拿了团队二等奖其他的学习方面好像没了，貌似就跟着课程学了一下课程知识，一周20多节的课，我逃掉了将近60%，即使上课，时间也都花到所在学生部门的工作上。1.1.2 工作 And 生活1.带出来一个气氛自我认为还算不错的学生部门(校学生会新媒体运营中心)2.带领着部门的小伙伴们参加河南省新媒体论坛3.报考了个驾照，只考了科一就没时间考了4.一狠心入了一个树莓派其他的似乎都久的忘记了1.2 大三上学期(下半年)1.2.1 学习1.假期期间补习了Java后端的框架，但是学到一半就扔到那了2.Android的学习止步了3.为了模拟登陆教务系统还有GiWiFi,认识了一下Python4.学了学Adobe LR1.2.2 生活 And 工作1.利用假期时间，考完了最难的科二，随后顺利拿到了驾照2.完成学生工作的交接，其中的辛酸也许只有自己最清楚罢了3.面试了3家公司，最终成功2家，又因为跟专业不太对口，于是就没有去。4.后来朋友的介绍之下去了一家公司面试，最终我们几个都被录用，现在在一起合租和工作。2017年大概就这么多吧，好多事情都忘记了2. 展望2018定个小目标，赚它几个亿，争取再脱个单2.1 学习1.2018年多看几本书，必须读完3本书2.提早完成毕业设计和毕业论文，顺利拿到毕业证3.如果有机会，再考几个有用的证书4.提升专业技能，至少把一门语言学习到拿来用于工作没问题2.2 生活 And 工作1.摆脱2017的现状，长长个，吃胖一点，锻炼出来肌肉(也许这个不太现实)2.脱个单吧，体验下里恋爱的感觉3.由几个人合租变成自己租房4.工作从普通职员晋升管理层，多学习锻炼管理能力5.多抽点时间去陪陪父母，多回家看看当棱角雕零的时刻，亦是人生衰败之时。